diff --git a/bin/job.py b/bin/job.py index d06398a..ed4cdad 100644 --- a/bin/job.py +++ b/bin/job.py @@ -1,17 +1,21 @@ '''job.py must be executed by a "zopectl run" command and, as single arg, must get a string with the following format: - ::[:]. + :::[:]. is the userName of the Zope administrator for this instance. is the path, within Zope, to the Plone Site object (if not at the root of the Zope hierarchy, use '/' as folder separator); - is the name of the Appy application; + is the name of the Appy application. If it begins with + "path=", it does not represent an Appy application, but + the path, within , to any Zope object + (use '/' as folder separator) is the name of the method to call on the tool in this - Appy application; + Appy application, or the method to call on the arbitrary + Zope object if previous param starts with "path=". (optional) are the arguments to give to this method (only strings are supported). Several arguments must be separated by '*'.''' @@ -43,18 +47,24 @@ else: from AccessControl.SecurityManagement import newSecurityManager user = app.acl_users.getUserById(zopeUser) if not hasattr(user, 'aq_base'): - user = user.__of__(uf) + user = user.__of__(app.acl_users) newSecurityManager(None, user) - # Get the Plone site ploneSite = app # Initialised with the Zope root object. for elem in plonePath.split('/'): ploneSite = getattr(ploneSite, elem) - # Get the tool corresponding to the Appy application - toolName = 'portal_%s' % appName.lower() - tool = getattr(ploneSite, toolName).appy() - # Execute the method on the tool + # If we are in a Appy application, the object on which we will call the + # method is the tool within this application. + if not appName.startswith('path='): + objectName = 'portal_%s' % appName.lower() + targetObject = getattr(ploneSite, objectName).appy() + else: + # It can be any object within the Plone site. + targetObject = ploneSite + for elem in appName[5:].split('/'): + targetObject = getattr(targetObject, elem) + # Execute the method on the target object if args: args = args.split('*') - exec 'tool.%s(*args)' % toolMethod + exec 'targetObject.%s(*args)' % toolMethod transaction.commit() # ------------------------------------------------------------------------------ diff --git a/doc/version.txt b/doc/version.txt index d1d899f..a918a2a 100644 --- a/doc/version.txt +++ b/doc/version.txt @@ -1 +1 @@ -0.5.5 +0.6.0 diff --git a/gen/__init__.py b/gen/__init__.py index 8ef53ae..2e842b7 100644 --- a/gen/__init__.py +++ b/gen/__init__.py @@ -1,14 +1,21 @@ # ------------------------------------------------------------------------------ -import re, time +import re, time, copy, sys, types, os, os.path from appy.shared.utils import Traceback -from appy.gen.utils import sequenceTypes, PageDescr, Keywords +from appy.gen.layout import Table +from appy.gen.layout import defaultFieldLayouts +from appy.gen.po import PoMessage +from appy.gen.utils import sequenceTypes, PageDescr, GroupDescr, Keywords, \ + FileWrapper from appy.shared.data import countries # Default Appy permissions ----------------------------------------------------- r, w, d = ('read', 'write', 'delete') -digit = re.compile('[0-9]') -alpha = re.compile('[a-zA-Z0-9]') +digit = re.compile('[0-9]') +alpha = re.compile('[a-zA-Z0-9]') letter = re.compile('[a-zA-Z]') +nullValues = (None, '', ' ') +validatorTypes = (types.FunctionType, type(re.compile(''))) +emptyTuple = () # Descriptor classes used for refining descriptions of elements in types # (pages, groups,...) ---------------------------------------------------------- @@ -19,6 +26,148 @@ class Page: self.phase = phase self.show = show +class Group: + '''Used for describing a group of widgets within a page.''' + def __init__(self, name, columns=['100%'], wide=True, style='fieldset', + hasLabel=True, hasDescr=False, hasHelp=False, + hasHeaders=False, group=None, colspan=1): + self.name = name + # In its simpler form, field "columns" below can hold a list or tuple + # of column widths expressed as strings, that will be given as is in + # the "width" attributes of the corresponding "td" tags. Instead of + # strings, within this list or tuple, you may give Column instances + # (see below). + self.columns = columns + self._setColumns() + # If field "wide" below is True, the HTML table corresponding to this + # group will have width 100%. + self.wide = wide + # If style = 'fieldset', all widgets within the group will be rendered + # within an HTML fieldset. If style is 'section1' or 'section2', widgets + # will be rendered after the group title. + self.style = style + # If hasLabel is True, the group will have a name and the corresponding + # i18n label will be generated. + self.hasLabel = hasLabel + # If hasDescr is True, the group will have a description and the + # corresponding i18n label will be generated. + self.hasDescr = hasDescr + # If hasHelp is True, the group will have a help text associated and the + # corresponding i18n label will be generated. + self.hasHelp = hasHelp + # If hasheaders is True, group content will begin with a row of headers, + # and a i18n label will be generated for every header. + self.hasHeaders = hasHeaders + self.nbOfHeaders = len(columns) + # If this group is himself contained in another group, the following + # attribute is filled. + self.group = Group.get(group) + # If the group is rendered into another group, we can specify the number + # of columns that this group will span. + self.colspan = colspan + if style == 'tabs': + # Group content will be rendered as tabs. In this case, some + # param combinations have no sense. + self.hasLabel = self.hasDescr = self.hasHelp = False + # The rendering is forced to a single column + self.columns = self.columns[:1] + # Header labels will be used as labels for the tabs. + self.hasHeaders = True + + def _setColumns(self): + '''Standardizes field "columns" as a list of Column instances. Indeed, + the initial value for field "columns" may be a list or tuple of + Column instances or strings.''' + for i in range(len(self.columns)): + columnData = self.columns[i] + if not isinstance(columnData, Column): + self.columns[i] = Column(self.columns[i]) + + @staticmethod + def get(groupData): + '''Produces a Group instance from p_groupData. User-defined p_groupData + can be a string or a Group instance; this method returns always a + Group instance.''' + res = groupData + if res and isinstance(res, basestring): + # Group data is given as a string. 2 more possibilities: + # (a) groupData is simply the name of the group; + # (b) groupData is of the form _. + groupElems = groupData.rsplit('_', 1) + if len(groupElems) == 1: + # We have case (a) + res = Group(groupElems[0]) + else: + try: + nbOfColumns = int(groupElems[1]) + except ValueError: + nbOfColumns = 1 + width = 100.0 / nbOfColumns + res = Group(groupElems[0], ['%.2f%%' % width] * nbOfColumns) + return res + + def generateLabels(self, messages, classDescr, walkedGroups): + '''This method allows to generate all the needed i18n labels related to + this group. p_messages is the list of i18n p_messages that we are + currently building; p_classDescr is the descriptor of the class where + this group is defined.''' + if self.hasLabel: + msgId = '%s_group_%s' % (classDescr.name, self.name) + poMsg = PoMessage(msgId, '', self.name, niceDefault=True) + if poMsg not in messages: + messages.append(poMsg) + classDescr.labelsToPropagate.append(poMsg) + if self.hasDescr: + msgId = '%s_group_%s_descr' % (classDescr.name, self.name) + poMsg = PoMessage(msgId, '', ' ') + if poMsg not in messages: + messages.append(poMsg) + classDescr.labelsToPropagate.append(poMsg) + if self.hasHelp: + msgId = '%s_group_%s_help' % (classDescr.name, self.name) + poMsg = PoMessage(msgId, '', ' ') + if poMsg not in messages: + messages.append(poMsg) + classDescr.labelsToPropagate.append(poMsg) + if self.hasHeaders: + for i in range(self.nbOfHeaders): + msgId = '%s_group_%s_col%d' % (classDescr.name, self.name, i+1) + poMsg = PoMessage(msgId, '', ' ') + if poMsg not in messages: + messages.append(poMsg) + classDescr.labelsToPropagate.append(poMsg) + walkedGroups.add(self) + if self.group and (self.group not in walkedGroups): + # We remember walked groups for avoiding infinite recursion. + self.group.generateLabels(messages, classDescr, walkedGroups) + + def insertInto(self, widgets, groupDescrs, page, metaType): + '''Inserts the GroupDescr instance corresponding to this Group instance + into p_widgets, the recursive structure used for displaying all + widgets in a given p_page, and returns this GroupDescr instance.''' + # First, create the corresponding GroupDescr if not already in + # p_groupDescrs. + if self.name not in groupDescrs: + groupDescr = groupDescrs[self.name] = GroupDescr(self, page, + metaType).get() + # Insert the group at the higher level (ie, directly in p_widgets) + # if the group is not itself in a group. + if not self.group: + widgets.append(groupDescr) + else: + outerGroupDescr = self.group.insertInto(widgets, groupDescrs, + page, metaType) + GroupDescr.addWidget(outerGroupDescr, groupDescr) + else: + groupDescr = groupDescrs[self.name] + return groupDescr + +class Column: + '''Used for describing a column within a Group like defined above.''' + def __init__(self, width, align="left"): + self.width = width + self.align = align + class Import: '''Used for describing the place where to find the data to use for creating an object.''' @@ -109,9 +258,10 @@ class Search: class Type: '''Basic abstract class for defining any appy type.''' def __init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, searchable, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized): + editDefault, show, page, group, layouts, move, indexed, + searchable, specificReadPermission, specificWritePermission, + width, height, colspan, master, masterValue, focus, + historized): # The validator restricts which values may be defined. It can be an # interval (1,None), a list of string values ['choice1', 'choice2'], # a regular expression, a custom function, a Selection instance, etc. @@ -132,6 +282,8 @@ class Type: self.default = default # Is the field optional or not ? self.optional = optional + # Is the field required or not ? (derived from multiplicity) + self.required = self.multiplicity[0] > 0 # May the user configure a default value ? self.editDefault = editDefault # Must the field be visible or not? @@ -139,10 +291,10 @@ class Type: # When displaying/editing the whole object, on what page and phase must # this field value appear? Default is ('main', 'main'). pageShow # indicates if the page must be shown or not. - self.page, self.phase, self.pageShow = PageDescr.getPageInfo(page, Page) + self.page, self.phase, self.pageShow = PageDescr.getPageInfo(page) # Within self.page, in what group of fields must this field value # appear? - self.group = group + self.group = Group.get(group) # The following attribute allows to move a field back to a previous # position (useful for content types that inherit from others). self.move = move @@ -162,10 +314,18 @@ class Type: # Widget width and height self.width = width self.height = height + # If the widget is in a group with multiple columns, the following + # attribute specifies on how many columns to span the widget. + self.colspan = colspan # The behaviour of this field may depend on another, "master" field self.master = master + self.slaves = [] # The list of slaves of this field, if it is a master + # Every HTML input field corresponding to a master must get some + # CSS classes for controlling its slaves. + self.master_css = '' if master: self.master.slaves.append(self) + self.master.master_css = 'appyMaster master_%s' % self.master.id # When master has some value(s), there is impact on this field. self.masterValue = masterValue # If a field must retain attention in a particular way, set focus=True. @@ -177,9 +337,64 @@ class Type: self.id = id(self) self.type = self.__class__.__name__ self.pythonType = None # The True corresponding Python type - self.slaves = [] # The list of slaves of this field - self.selfClass = None # The Python class to which this Type definition - # is linked. This will be computed at runtime. + # Get the layouts. Consult layout.py for more info about layouts. + areDefaultLayouts = False + if not layouts: + # Get the default layouts as defined by the subclass + areDefaultLayouts = True + layouts = self.getDefaultLayouts() + if not layouts: + # Get the global default layouts + layouts = copy.deepcopy(defaultFieldLayouts) + else: + layouts = copy.deepcopy(layouts) + # We make copies of layouts, because every layout can be different, + # even if the user decides to reuse one from one field to another. + # This is because we modify every layout for adding + # master/slave-related info, focus-related info, etc, which can be + # different from one field to the other. + # Express the layouts in a standardized way. + self.layouts = self.formatLayouts(layouts, areDefaultLayouts) + self.hasLabel = self.hasLayoutElement('l') + self.hasDescr = self.hasLayoutElement('d') + self.hasHelp = self.hasLayoutElement('h') + # Can we filter this field? + self.filterable = False + # Can this field have values that can be edited and validated? + self.validable = True + + def init(self, name, klass, appName): + '''When the application server starts, this secondary constructor is + called for storing the names of the Appy field (p_name) and other + attributes that are based on the name of the Appy p_klass, and the + application name (p_appName).''' + self.name = name + # Determine ids of i18n labels for this field + if not klass: prefix = appName + elif klass.__module__.endswith('.appyWrappers'): + prefix = appName + klass.__name__ + elif Tool in klass.__bases__: + prefix = appName + 'Tool' + elif Flavour in klass.__bases__: + prefix = appName + 'Flavour' + else: + prefix = klass.__module__.replace('.', '_') + '_' + klass.__name__ + self.labelId = '%s_%s' % (prefix, name) + self.descrId = self.labelId + '_descr' + self.helpId = self.labelId + '_help' + # Determine read and write permissions for this field + if self.specificReadPermission: + self.readPermission = '%s: Read %s %s' % (appName, prefix, name) + else: + self.readPermission = 'View' + if self.specificWritePermission: + self.writePermission = '%s: Write %s %s' % (appName, prefix, name) + else: + self.writePermission = 'Modify portal content' + if isinstance(self, Ref): + self.backd = self.back.__dict__ + if isinstance(self, Ref) and not self.isBack: + self.back.relationship = '%s_%s_rel' % (prefix, name) def isMultiValued(self): '''Does this type definition allow to define multiple values?''' @@ -198,36 +413,247 @@ class Type: return self.type in ('Integer', 'Float', 'Boolean', 'Date') or \ ((self.type == 'String') and (self.format == 0)) + def isShowable(self, obj, layoutType): + '''When displaying p_obj on a given p_layoutType, must we show this + field?''' + isEdit = layoutType == 'edit' + # Do not show field if it is optional and not selected in flavour + if self.optional: + tool = obj.getTool() + flavour = tool.getFlavour(obj, appy=True) + flavourAttrName = 'optionalFieldsFor%s' % obj.meta_type + flavourAttrValue = getattr(flavour, flavourAttrName, ()) + if self.name not in flavourAttrValue: + return False + # Check if the user has the permission to view or edit the field + user = obj.portal_membership.getAuthenticatedMember() + if isEdit: + perm = self.writePermission + else: + perm = self.readPermission + if not user.has_permission(perm, obj): + return False + # Evaluate self.show + if callable(self.show): + res = self.show(obj.appy()) + else: + res = self.show + # Take into account possible values 'view' and 'edit' for 'show' param. + if (res == 'view' and isEdit) or (res == 'edit' and not isEdit): + res = False + return res + + def formatLayouts(self, layouts, areDefault): + '''Standardizes the given dict of p_layouts. p_areDefault is True if + p_layouts are the global default layouts or a subclass-specific set + of default layouts.''' + # Create a Table instance for every simple layout string. + for layoutType in layouts.iterkeys(): + if isinstance(layouts[layoutType], basestring): + layouts[layoutType] = Table(layouts[layoutType]) + # Create the "cell" layout if not specified. + if 'cell' not in layouts: + layouts['cell'] = Table('f') + # Put the required CSS classes in the layouts + layouts['cell'].addCssClasses('no-style-table') + if self.master: + # This type has a master (so is a slave): we add css classes + # allowing to show/hide, in Javascript, its widget according to + # master value. + classes = 'slave_%s' % self.master.id + classes += ' slaveValue_%s_%s' % (self.master.id, self.masterValue) + layouts['view'].addCssClasses(classes) + layouts['edit'].addCssClasses(classes) + if self.focus: + # We need to make it flashy + layouts['view'].addCssClasses('appyFocus') + layouts['edit'].addCssClasses('appyFocus') + # If layouts are the default ones, set width=None instead of width=100% + # for the field if it is not in a group. + if areDefault and not self.group: + for layoutType in layouts.iterkeys(): + layouts[layoutType].width = '' + # Remove letters "r" from the layouts if the field is not required. + if not self.required: + for layoutType in layouts.iterkeys(): + layouts[layoutType].removeElement('r') + # Store Table instance's dicts instead of instances: this way, they can + # be manipulated in ZPTs. + for layoutType in layouts.iterkeys(): + layouts[layoutType] = layouts[layoutType].get() + return layouts + + def hasLayoutElement(self, element): + '''This method returns True if the given layout p_element can be found + at least once among the various p_layouts defined for this field.''' + for layout in self.layouts.itervalues(): + if element in layout['layoutString']: return True + return False + + def getDefaultLayouts(self): + '''Any subclass can define this for getting a specific set of + default layouts. If None is returned, a global set of default layouts + will be used.''' + + def getCss(self, layoutType): + '''This method returns a list of CSS files that are required for + displaying widgets of self's type on a given p_layoutType.''' + + def getJs(self, layoutType): + '''This method returns a list of Javascript files that are required for + displaying widgets of self's type on a given p_layoutType.''' + + def getValue(self, obj): + '''Gets, on_obj, the value conforming to self's type definition.''' + value = getattr(obj, self.name, None) + if (value == None): + # If there is no value, get the default value if any + if not self.editDefault: return self.default + # If value is editable, get the default value from the flavour + portalTypeName = obj._appy_getPortalType(obj.REQUEST) + tool = obj.getTool() + flavour = tool.getFlavour(portalTypeName, appy=True) + return getattr(flavour, 'defaultValueFor%s' % self.labelId) + return value + + def getFormattedValue(self, obj, value): + '''p_value is a real p_obj(ect) value from a field from this type. This + method returns a pretty, string-formatted version, for displaying + purposes. Needs to be overridden by some child classes.''' + if value in nullValues: return '' + return value + + def getRequestValue(self, request): + '''Gets the string or (or list of strings if multi-valued) + representation of this field as found in the p_request.''' + return request.get(self.name, None) + + def getStorableValue(self, value): + '''p_value is a valid value initially computed through calling + m_getRequestValue. So, it is a valid string (or list of strings) + representation of the field value coming from the request. + This method computes the real (potentially converted or manipulated + in some other way) value as can be stored in the database.''' + if value in nullValues: return None + return value + + def validateValue(self, obj, value): + '''This method may be overridden by child classes and will be called at + the right moment by m_validate defined below for triggering + type-specific validation. p_value is never empty.''' + return None + + def validate(self, obj, value): + '''This method checks that p_value, coming from the request (p_obj is + being created or edited) and formatted through a call to + m_getRequestValue defined above, is valid according to this type + definition. If it is the case, None is returned. Else, a translated + error message is returned.''' + # Check that a value is given if required. + if value in nullValues: + if self.required: return obj.translate('field_required') + else: return None + # Triggers the sub-class-specific validation for this value + message = self.validateValue(obj, value) + if message: return message + # Evaluate the custom validator if one has been specified + value = self.getStorableValue(value) + if self.validator and (type(self.validator) in validatorTypes): + obj = obj.appy() + if type(self.validator) == validatorTypes[0]: + # It is a custom function. Execute it. + try: + validValue = self.validator(obj, value) + if isinstance(validValue, basestring) and validValue: + # Validation failed; and p_validValue contains an error + # message. + return validValue + else: + if not validValue: + return obj.translate('%s_valid' % self.labelId) + except Exception, e: + return str(e) + except: + return obj.translate('%s_valid' % self.labelId) + elif type(self.validator) == validatorTypes[1]: + # It is a regular expression + if not validator.match(value): + # If the regular expression is among the default ones, we + # generate a specific error message. + if validator == String.EMAIL: + return obj.translate('bad_email') + elif validator == String.URL: + return obj.translate('bad_url') + elif validator == String.ALPHANUMERIC: + return obj.translate('bad_alphanumeric') + else: + return obj.translate('%s_valid' % self.labelId) + + def store(self, obj, value): + '''Stores the p_value (produced by m_getStorableValue) that complies to + p_self type definition on p_obj.''' + setattr(obj, self.name, value) + class Integer(Type): def __init__(self, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, show=True, - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts=None, move=0, indexed=False, searchable=False, specificReadPermission=False, - specificWritePermission=False, width=None, height=None, - master=None, masterValue=None, focus=False, historized=False): + specificWritePermission=False, width=6, height=None, + colspan=1, master=None, masterValue=None, focus=False, + historized=False): Type.__init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, searchable, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) + editDefault, show, page, group, layouts, move, indexed, + searchable, specificReadPermission, + specificWritePermission, width, height, colspan, master, + masterValue, focus, historized) self.pythonType = long + def validateValue(self, obj, value): + try: + value = self.pythonType(value) + except ValueError: + return obj.translate('bad_%s' % self.pythonType.__name__) + + def getStorableValue(self, value): + if value not in nullValues: return self.pythonType(value) + class Float(Type): def __init__(self, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, show=True, - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts=None, move=0, indexed=False, searchable=False, specificReadPermission=False, - specificWritePermission=False, width=None, height=None, - master=None, masterValue=None, focus=False, historized=False, - precision=None): - Type.__init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, False, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) - self.pythonType = float + specificWritePermission=False, width=6, height=None, + colspan=1, master=None, masterValue=None, focus=False, + historized=False, precision=None): # The precision is the number of decimal digits. This number is used # for rendering the float, but the internal float representation is not # rounded. self.precision = precision + Type.__init__(self, validator, multiplicity, index, default, optional, + editDefault, show, page, group, layouts, move, indexed, + False, specificReadPermission, specificWritePermission, + width, height, colspan, master, masterValue, focus, + historized) + self.pythonType = float + + def getFormattedValue(self, obj, value): + if value in nullValues: return '' + if self.precision == None: + res = str(value) + else: + format = '%%.%df' % appyType.precision + res = format % value + return res + + def validateValue(self, obj, value): + try: + value = self.pythonType(value) + except ValueError: + return obj.translate('bad_%s' % self.pythonType.__name__) + + def getStorableValue(self, value): + if value not in nullValues: return self.pythonType(value) class String(Type): # Some predefined regular expressions that may be used as validators @@ -275,6 +701,7 @@ class String(Type): @staticmethod def MODULO_97_COMPLEMENT(obj, value): return String._MODULO_97(obj, value, True) + BELGIAN_ENTERPRISE_NUMBER = MODULO_97_COMPLEMENT @staticmethod def IBAN(obj, value): '''Checks that p_value corresponds to a valid IBAN number. IBAN stands @@ -332,23 +759,34 @@ class String(Type): PASSWORD = 3 def __init__(self, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, format=LINE, - show=True, page='main', group=None, move=0, indexed=False, - searchable=False, specificReadPermission=False, + show=True, page='main', group=None, layouts=None, move=0, + indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, width=None, height=None, - master=None, masterValue=None, focus=False, historized=False, - transform='none'): - Type.__init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, searchable, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) + colspan=1, master=None, masterValue=None, focus=False, + historized=False, transform='none'): self.format = format - self.isSelect = self.isSelection() # The following field has a direct impact on the text entered by the # user. It applies a transformation on it, exactly as does the CSS # "text-transform" property. Allowed values are those allowed for the # CSS property: "none" (default), "uppercase", "capitalize" or # "lowercase". self.transform = transform + # Default width and height vary according to String format + if width == None: + if format == String.TEXT: width = 60 + else: width = 30 + if height == None: + if format == String.TEXT: height = 5 + else: height = 1 + Type.__init__(self, validator, multiplicity, index, default, optional, + editDefault, show, page, group, layouts, move, indexed, + searchable, specificReadPermission, + specificWritePermission, width, height, colspan, master, + masterValue, focus, historized) + self.isSelect = self.isSelection() + self.filterable = self.indexed and (self.format == String.LINE) and \ + not self.isSelect + def isSelection(self): '''Does the validator of this type definition define a list of values into which the user must select one or more values?''' @@ -363,101 +801,419 @@ class String(Type): res = False return res + def getDefaultLayouts(self): + '''Returns the default layouts for this type. Default layouts can vary + acccording to format or multiplicity.''' + if self.format in (String.TEXT, String.XHTML): + return {'view': 'l-d-f', 'edit': 'lrv-d-f'} + elif self.isMultiValued(): + return {'view': 'l-f', 'edit': 'lrv-f'} + + def getValue(self, obj): + value = Type.getValue(self, obj) + if not value: + if self.isMultiValued(): return emptyTuple + else: return value + if isinstance(value, basestring) and self.isMultiValued(): + value = [value] + elif value.__class__.__name__ == 'BaseUnit': + try: + value = unicode(value) + except UnicodeDecodeError: + value = str(value) + return value + + def getFormattedValue(self, obj, value): + if value in nullValues: return '' + res = value + if self.isSelect: + if isinstance(self.validator, Selection): + # Value(s) come from a dynamic vocabulary + val = self.validator + if self.isMultiValued(): + return [val.getText(obj, v, self) for v in value] + else: + return val.getText(obj, value, self) + else: + # Value(s) come from a fixed vocabulary whose texts are in + # i18n files. + t = obj.translate + if self.isMultiValued(): + res = [t('%s_list_%s' % (self.labelId, v)) for v in value] + else: + res = t('%s_list_%s' % (self.labelId, value)) + elif not isinstance(value, basestring): + # Archetypes "Description" fields may hold a BaseUnit instance. + try: + res = unicode(value) + except UnicodeDecodeError: + res = str(value) + return res + + def getPossibleValues(self,obj,withTranslations=False,withBlankValue=False): + '''Returns the list of possible values for this field if it is a + selection field. If p_withTranslations is True, + instead of returning a list of string values, the result is a list + of tuples (s_value, s_translation). If p_withBlankValue is True, a + blank value is prepended to the list, excepted if the type is + multivalued.''' + if not self.isSelect: raise 'This field is not a selection.' + if isinstance(self.validator, Selection): + # We need to call self.methodName for getting the (dynamic) values. + # If methodName begins with _appy_, it is a special Appy method: + # we will call it on the Mixin (=p_obj) directly. Else, it is a + # user method: we will call it on the wrapper (p_obj.appy()). Some + # args can be hidden into p_methodName, separated with stars, + # like in this example: method1*arg1*arg2. Only string params are + # supported. + methodName = self.validator.methodName + # Unwrap parameters if any. + if methodName.find('*') != -1: + elems = methodName.split('*') + methodName = elems[0] + args = elems[1:] + else: + args = () + # On what object must we call the method that will produce the + # values? + if methodName.startswith('tool:'): + obj = obj.getTool() + methodName = methodName[5:] + # Do we need to call the method on the object or on the wrapper? + if methodName.startswith('_appy_'): + exec 'res = obj.%s(*args)' % methodName + else: + exec 'res = obj.appy().%s(*args)' % methodName + if not withTranslations: res = [v[0] for v in res] + elif isinstance(res, list): res = res[:] + else: + # The list of (static) values is directly given in self.validator. + res = [] + for value in self.validator: + label = '%s_list_%s' % (self.labelId, value) + if withTranslations: + res.append( (value, obj.translate(label)) ) + else: + res.append(value) + if withBlankValue and not self.isMultiValued(): + # Create the blank value to insert at the beginning of the list + if withTranslations: + blankValue = ('', obj.translate('choose_a_value')) + else: + blankValue = '' + # Insert the blank value in the result + if isinstance(res, tuple): + res = (blankValue,) + res + else: + res.insert(0, blankValue) + return res + + def validateValue(self, obj, value): + if self.isSelect: + possibleValues = self.getPossibleValues(obj) + if isinstance(value, basestring): + error = value not in possibleValues + else: + error = False + for v in value: + if v not in possibleValues: + error = True + break + # Check that the value is among possible values + if error: obj.translate('bad_select_value') + + def store(self, obj, value): + if self.isMultiValued() and isinstance(value, basestring): + value = [value] + setattr(obj, self.name, value) + class Boolean(Type): def __init__(self, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, show=True, - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts = None, move=0, indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, width=None, height=None, - master=None, masterValue=None, focus=False, historized=False): + colspan=1, master=None, masterValue=None, focus=False, + historized=False): Type.__init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, searchable, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) + editDefault, show, page, group, layouts, move, indexed, + searchable, specificReadPermission, + specificWritePermission, width, height, colspan, master, + masterValue, focus, historized) self.pythonType = bool + def getDefaultLayouts(self): + return {'view': 'l;f!_', 'edit': Table('f;lrv;=', width=None)} + + def getFormattedValue(self, obj, value): + if value in nullValues: return '' + if value: res = obj.translate('yes', domain='plone') + else: res = obj.translate('no', domain='plone') + return res + + def getStorableValue(self, value): + if value not in nullValues: + exec 'res = %s' % value + return res + class Date(Type): # Possible values for "format" WITH_HOUR = 0 WITHOUT_HOUR = 1 + dateParts = ('year', 'month', 'day') + hourParts = ('hour', 'minute') def __init__(self, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, format=WITH_HOUR, startYear=time.localtime()[0]-10, endYear=time.localtime()[0]+10, show=True, page='main', - group=None, move=0, indexed=False, searchable=False, - specificReadPermission=False, specificWritePermission=False, - width=None, height=None, master=None, masterValue=None, - focus=False, historized=False): - Type.__init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, searchable, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) + group=None, layouts=None, move=0, indexed=False, + searchable=False, specificReadPermission=False, + specificWritePermission=False, width=None, height=None, + colspan=1, master=None, masterValue=None, focus=False, + historized=False): self.format = format self.startYear = startYear self.endYear = endYear + Type.__init__(self, validator, multiplicity, index, default, optional, + editDefault, show, page, group, layouts, move, indexed, + searchable, specificReadPermission, + specificWritePermission, width, height, colspan, master, + masterValue, focus, historized) + + def getCss(self, layoutType): + if layoutType == 'edit': return ('jscalendar/calendar-system.css',) + + def getJs(self, layoutType): + if layoutType == 'edit': + return ('jscalendar/calendar_stripped.js', + 'jscalendar/calendar-en.js') + + def getFormattedValue(self, obj, value): + if value in nullValues: return '' + res = value.strftime('%d/%m/') + str(value.year()) + if self.format == Date.WITH_HOUR: + res += ' %s' % value.strftime('%H:%M') + return res + + def getRequestValue(self, request): + # Manage the "date" part + value = '' + for part in self.dateParts: + valuePart = request.get('%s_%s' % (self.name, part), None) + if not valuePart: return None + value += valuePart + '/' + value = value[:-1] + # Manage the "hour" part + if self.format == self.WITH_HOUR: + value += ' ' + for part in self.hourParts: + valuePart = request.get('%s_%s' % (self.name, part), None) + if not valuePart: return None + value += valuePart + ':' + value = value[:-1] + return value + + def getStorableValue(self, value): + if value not in nullValues: + import DateTime + return DateTime.DateTime(value) class File(Type): def __init__(self, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, show=True, - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts=None, move=0, indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, width=None, height=None, - master=None, masterValue=None, focus=False, historized=False, - isImage=False): - Type.__init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, False, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) + colspan=1, master=None, masterValue=None, focus=False, + historized=False, isImage=False): self.isImage = isImage + Type.__init__(self, validator, multiplicity, index, default, optional, + editDefault, show, page, group, layouts, move, indexed, + False, specificReadPermission, specificWritePermission, + width, height, colspan, master, masterValue, focus, + historized) + + def getValue(self, obj): + value = Type.getValue(self, obj) + if value: value = FileWrapper(value) + return value + + def getFormattedValue(self, obj, value): + if not value: return value + return value._atFile + + def getRequestValue(self, request): + res = request.get('%s_file' % self.name) + return request.get('%s_file' % self.name) + + def getDefaultLayouts(self): return {'view':'lf','edit':'lrv-f'} + + imageExts = ('.jpg', '.jpeg', '.png', '.gif') + def validateValue(self, obj, value): + form = obj.REQUEST.form + action = '%s_delete' % self.name + if not value.filename and form.has_key(action) and not form[action]: + # If this key is present but empty, it means that the user selected + # "replace the file with a new one". So in this cas he must provide + # a new file to upload. + return obj.translate('file_required') + # Check that, if self.isImage, the uploaded file is really an image + if value and value.filename and self.isImage: + ext = os.path.splitext(value.filename)[1].lower() + if ext not in File.imageExts: + return obj.translate('image_required') + + defaultMimeType = 'application/octet-stream' + def store(self, obj, value): + '''Stores the p_value (produced by m_getStorableValue) that complies to + p_self type definition on p_obj.''' + if value: + # Retrieve the existing value, or create one if None + existingValue = getattr(obj, self.name, None) + if not existingValue: + import OFS.Image + existingValue = OFS.Image.File(self.name, '', '') + # Set mimetype + if value.headers.has_key('content-type'): + mimeType = value.headers['content-type'] + else: + mimeType = File.defaultMimeType + existingValue.content_type = mimeType + # Set filename + fileName = value.filename + filename = fileName[max(fileName.rfind('/'), fileName.rfind('\\'), + fileName.rfind(':'))+1:] + existingValue.filename = fileName + # Set content + existingValue.manage_upload(value) + setattr(obj, self.name, existingValue) + else: + # What must I do: delete the existing file or keep it ? + action = obj.REQUEST.get('%s_delete' % self.name) + if action == 'nochange': pass + else: setattr(obj, self.name, None) class Ref(Type): def __init__(self, klass=None, attribute=None, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, add=False, link=True, unlink=False, - back=None, isBack=False, show=True, page='main', group=None, - showHeaders=False, shownInfo=(), wide=False, select=None, - maxPerPage=30, move=0, indexed=False, searchable=False, + back=None, show=True, page='main', group=None, layouts=None, + showHeaders=False, shownInfo=(), select=None, maxPerPage=30, + move=0, indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, - width=None, height=None, master=None, masterValue=None, - focus=False, historized=False): - Type.__init__(self, validator, multiplicity, index, default, optional, - editDefault, show, page, group, move, indexed, False, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) + width=None, height=None, colspan=1, master=None, + masterValue=None, focus=False, historized=False): self.klass = klass self.attribute = attribute - self.add = add # May the user add new objects through this ref ? - self.link = link # May the user link existing objects through this ref? - self.unlink = unlink # May the user unlink existing objects? - self.back = back - self.isBack = isBack # Should always be False - self.showHeaders = showHeaders # When displaying a tabular list of - # referenced objects, must we show the table headers? - self.shownInfo = shownInfo # When displaying referenced object(s), - # we will display its title + all other fields whose names are listed - # in this attribute. - self.wide = wide # If True, the table of references will be as wide - # as possible - self.select = select # If a method is defined here, it will be used to + # May the user add new objects through this ref ? + self.add = add + # May the user link existing objects through this ref? + self.link = link + # May the user unlink existing objects? + self.unlink = unlink + if back: + # It is a forward reference + self.isBack = False + # Initialise the backward reference + self.back = back + self.backd = back.__dict__ + back.isBack = True + back.back = self + back.backd = self.__dict__ + # When displaying a tabular list of referenced objects, must we show + # the table headers? + self.showHeaders = showHeaders + # When displaying referenced object(s), we will display its title + all + # other fields whose names are listed in the following attribute. + self.shownInfo = shownInfo + # If a method is defined in this field "select", it will be used to # filter the list of available tied objects. - self.maxPerPage = maxPerPage # Maximum number of referenced objects - # shown at once. + self.select = select + # Maximum number of referenced objects shown at once. + self.maxPerPage = maxPerPage + Type.__init__(self, validator, multiplicity, index, default, optional, + editDefault, show, page, group, layouts, move, indexed, + False, specificReadPermission, specificWritePermission, + width, height, colspan, master, masterValue, focus, + historized) + self.validable = self.link + + def getDefaultLayouts(self): return {'view': 'l-f', 'edit': 'lrv-f'} + def isShowable(self, obj, layoutType): + if (layoutType == 'edit') and self.add: return False + if self.isBack: + if layoutType == 'edit': return False + else: + return obj.getBRefs(self.relationship) + return Type.isShowable(self, obj, layout) + + def getValue(self, obj): + if self.isBack: + return obj._appy_getRefsBack(self.name, self.relationship, + noListIfSingleObj=True) + else: + return obj._appy_getRefs(self.name, noListIfSingleObj=True).objects + + def getFormattedValue(self, obj, value): + return value + + def getRequestValue(self, request): + return request.get('appy_ref_%s' % self.name, None) + + def validateValue(self, obj, value): + if not self.link: return None + # We only check "link" Refs because in edit views, "add" Refs are + # not visible. So if we check "add" Refs, on an "edit" view we will + # believe that that there is no referred object even if there is. + # If the field is a reference, we must ensure itself that multiplicities + # are enforced. + if not value: + nbOfRefs = 0 + elif isinstance(value, basestring): + nbOfRefs = 1 + else: + nbOfRefs = len(value) + minRef = self.multiplicity[0] + maxRef = self.multiplicity[1] + if maxRef == None: + maxRef = sys.maxint + if nbOfRefs < minRef: + return obj.translate('min_ref_violated') + elif nbOfRefs > maxRef: + return obj.translate('max_ref_violated') class Computed(Type): def __init__(self, validator=None, multiplicity=(0,1), index=None, default=None, optional=False, editDefault=False, show='view', - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts=None, move=0, indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, width=None, height=None, - method=None, plainText=True, master=None, masterValue=None, - focus=False, historized=False): + colspan=1, method=None, plainText=True, master=None, + masterValue=None, focus=False, historized=False): + # The Python method used for computing the field value + self.method = method + # Does field computation produce plain text or XHTML? + self.plainText = plainText Type.__init__(self, None, multiplicity, index, default, optional, - False, show, page, group, move, indexed, False, + False, show, page, group, layouts, move, indexed, False, specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) - self.method = method # The method used for computing the field value - self.plainText = plainText # Does field computation produce pain text - # or XHTML? + height, colspan, master, masterValue, focus, historized) + self.validable = False + + def getValue(self, obj): + '''Computes the value instead of getting it in the database.''' + if not self.method: return '' + obj = obj.appy() + try: + res = self.method(obj) + if not isinstance(res, basestring): + res = repr(res) + except Exception, e: + obj.log(Traceback.get(), type='error') + res = str(e) + return res + + def getFormattedValue(self, obj, value): return self.getValue(obj) class Action(Type): '''An action is a workflow-independent Python method that can be triggered @@ -466,23 +1222,29 @@ class Action(Type): tool class. An action is rendered as a button.''' def __init__(self, validator=None, multiplicity=(1,1), index=None, default=None, optional=False, editDefault=False, show=True, - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts=None, move=0, indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, width=None, height=None, - action=None, result='computation', confirm=False, master=None, - masterValue=None, focus=False, historized=False): + colspan=1, action=None, result='computation', confirm=False, + master=None, masterValue=None, focus=False, historized=False): + # Can be a single method or a list/tuple of methods + self.action = action + # For the following field, value 'computation' means that the action + # will simply compute things and redirect the user to the same page, + # with some status message about execution of the action. 'file' means + # that the result is the binary content of a file that the user will + # download. + self.result = result + # If following field "confirm" is True, a popup will ask the user if + # she is really sure about triggering this action. + self.confirm = confirm Type.__init__(self, None, (0,1), index, default, optional, - False, show, page, group, move, indexed, False, + False, show, page, group, layouts, move, indexed, False, specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) - self.action = action # Can be a single method or a list/tuple of methods - self.result = result # 'computation' means that the action will simply - # compute things and redirect the user to the same page, with some - # status message about execution of the action. 'file' means that the - # result is the binary content of a file that the user will download. - self.confirm = confirm # If True, a popup will ask the user if she is - # really sure about triggering this action. + height, colspan, master, masterValue, focus, historized) + self.validable = False + def getDefaultLayouts(self): return {'view': 'l-f', 'edit': 'lrv-f'} def __call__(self, obj): '''Calls the action on p_obj.''' try: @@ -514,19 +1276,25 @@ class Action(Type): obj.log(Traceback.get(), type='error') return res + def isShowable(self, obj, layoutType): + if layoutType == 'edit': return False + else: return Type.isShowable(self, obj, layoutType) + class Info(Type): '''An info is a field whose purpose is to present information (text, html...) to the user.''' def __init__(self, validator=None, multiplicity=(1,1), index=None, default=None, optional=False, editDefault=False, show='view', - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts=None, move=0, indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, width=None, height=None, - master=None, masterValue=None, focus=False, historized=False): + colspan=1, master=None, masterValue=None, focus=False, + historized=False): Type.__init__(self, None, (0,1), index, default, optional, - False, show, page, group, move, indexed, False, + False, show, page, group, layouts, move, indexed, False, specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) + height, colspan, master, masterValue, focus, historized) + self.validable = False class Pod(Type): '''A pod is a field allowing to produce a (PDF, ODT, Word, RTF...) document @@ -534,21 +1302,29 @@ class Pod(Type): want to put in it. It uses appy.pod.''' def __init__(self, validator=None, index=None, default=None, optional=False, editDefault=False, show='view', - page='main', group=None, move=0, indexed=False, + page='main', group=None, layouts=None, move=0, indexed=False, searchable=False, specificReadPermission=False, specificWritePermission=False, width=None, height=None, - master=None, masterValue=None, focus=False, historized=False, - template=None, context=None, action=None, askAction=False): + colspan=1, master=None, masterValue=None, focus=False, + historized=False, template=None, context=None, action=None, + askAction=False): + # The following param stores the path to a POD template + self.template = template + # The context is a dict containing a specific pod context, or a method + # that returns such a dict. + self.context = context + # Next one is a method that will be triggered after the document has + # been generated. + self.action = action + # If askAction is True, the action will be triggered only if the user + # checks a checkbox, which, by default, will be unchecked. + self.askAction = askAction Type.__init__(self, None, (0,1), index, default, optional, - False, show, page, group, move, indexed, searchable, - specificReadPermission, specificWritePermission, width, - height, master, masterValue, focus, historized) - self.template = template # The path to a POD template - self.context = context # A dict containing a specific pod context - self.action = action # A method that will be triggered after the - # document has been generated. - self.askAction = askAction # If True, the action will be triggered only - # if the user checks a checkbox, which, by default, will be unchecked. + False, show, page, group, layouts, move, indexed, + searchable, specificReadPermission, + specificWritePermission, width, height, colspan, master, + masterValue, focus, historized) + self.validable = False # Workflow-specific types ------------------------------------------------------ class State: @@ -693,19 +1469,18 @@ class Selection: # for the related field. It must correspond to an instance method of # the class defining the related field. This method accepts no argument # and must return a list (or tuple) of pairs (lists or tuples): - # (id, text), where "id" is one of the possible values for the field, - # and "text" is the value as will be shown on the screen. You can use - # self.translate within this method to produce an internationalized - # "text" if needed. + # (id, text), where "id" is one of the possible values for the + # field, and "text" is the value as will be shown on the screen. + # You can use self.translate within this method to produce an + # internationalized version of "text" if needed. self.methodName = methodName - def getText(self, obj, value): + def getText(self, obj, value, appyType): '''Gets the text that corresponds to p_value.''' - vocab = obj._appy_getDynamicDisplayList(self.methodName) - if type(value) in sequenceTypes: - return [vocab.getValue(v) for v in value] - else: - return vocab.getValue(value) + for v, text in appyType.getPossibleValues(obj, withTranslations=True): + if v == value: + return text + return value # ------------------------------------------------------------------------------ class Tool: @@ -756,4 +1531,10 @@ class Config: # concepts differently. For example, class Thing in flavour 2 may have # i18n label "MyProject_Thing_2". self.numberOfFlavours = 2 + +# ------------------------------------------------------------------------------ +# Special field "type" is mandatory for every class. If one class does not +# define it, we will add a copy of the instance defined below. +title = String(multiplicity=(1,1), indexed=True, show='edit') +title.init('title', None, 'appy') # ------------------------------------------------------------------------------ diff --git a/gen/descriptors.py b/gen/descriptors.py index 238b84c..b263ca6 100644 --- a/gen/descriptors.py +++ b/gen/descriptors.py @@ -4,10 +4,13 @@ from appy.gen import State, Transition, Type # ------------------------------------------------------------------------------ class Descriptor: # Abstract def __init__(self, klass, orderedAttributes, generator): - self.klass = klass # The corresponding Python class - self.orderedAttributes = orderedAttributes # Names of the static appy- - # compliant attributes declared in self.klass - self.generator = generator # A reference to the code generator. + # The corresponding Python class + self.klass = klass + # The names of the static appy-compliant attributes declared in + # self.klass + self.orderedAttributes = orderedAttributes + # A reference to the code generator. + self.generator = generator def __repr__(self): return '' % self.klass.__name__ @@ -19,14 +22,22 @@ class ClassDescriptor(Descriptor): the condition will be returned. p_condition must be a string containing an expression that will be evaluated with, in its context, "self" being this ClassDescriptor and "attrValue" being the current - Type instance.''' - res = [] + Type instance. + + Order of returned attributes already takes into account type's + "move" attributes.''' + attrs = [] # First, get the attributes for the current class for attrName in self.orderedAttributes: - attrValue = getattr(self.klass, attrName) + try: + attrValue = getattr(self.klass, attrName) + hookClass = self.klass + except AttributeError: + attrValue = getattr(self.modelClass, attrName) + hookClass = self.modelClass if isinstance(attrValue, Type): if not condition or eval(condition): - res.append( (attrName, attrValue) ) + attrs.append( (attrName, attrValue, hookClass) ) # Then, add attributes from parent classes for baseClass in self.klass.__bases__: # Find the classDescr that corresponds to baseClass @@ -36,7 +47,17 @@ class ClassDescriptor(Descriptor): baseClassDescr = classDescr break if baseClassDescr: - res = baseClassDescr.getOrderedAppyAttributes() + res + attrs = baseClassDescr.getOrderedAppyAttributes() + attrs + # Modify attributes order by using "move" attributes + res = [] + for name, appyType, klass in attrs: + if appyType.move: + newPosition = len(res) - abs(appyType.move) + if newPosition <= 0: + newPosition = 0 + res.insert(newPosition, (name, appyType, klass)) + else: + res.append((name, appyType, klass)) return res def getChildren(self): @@ -51,7 +72,7 @@ class ClassDescriptor(Descriptor): def getPhases(self): '''Gets the phases defined on fields of this class.''' res = [] - for fieldName, appyType in self.getOrderedAppyAttributes(): + for fieldName, appyType, klass in self.getOrderedAppyAttributes(): if appyType.phase not in res: res.append(appyType.phase) return res diff --git a/gen/generator.py b/gen/generator.py index d42bedb..635e5a6 100644 --- a/gen/generator.py +++ b/gen/generator.py @@ -131,14 +131,9 @@ class Generator: if not os.path.exists(self.templatesFolder): print WARN_NO_TEMPLATE % self.templatesFolder # Default descriptor classes - self.classDescriptor = ClassDescriptor - self.workflowDescriptor = WorkflowDescriptor - self.customToolClassDescriptor = ClassDescriptor - self.customFlavourClassDescriptor = ClassDescriptor - # Custom tool and flavour classes, if they are defined in the - # application - self.customToolDescr = None - self.customFlavourDescr = None + self.descriptorClasses = { + 'class': ClassDescriptor, 'tool': ClassDescriptor, + 'flavour': ClassDescriptor, 'workflow': WorkflowDescriptor} # The following dict contains a series of replacements that need to be # applied to file templates to generate files. self.repls = {'applicationName': self.applicationName, @@ -146,6 +141,8 @@ class Generator: 'codeHeader': CODE_HEADER} # List of Appy classes and workflows found in the application self.classes = [] + self.tool = None + self.flavour = None self.workflows = [] self.initialize() self.config = Config.getDefault() @@ -225,24 +222,30 @@ class Generator: # of their definition). attrs = astClasses[moduleElem.__name__].attributes if appyType == 'class': + # Determine the class type (standard, tool, flavour...) if issubclass(moduleElem, Tool): - descrClass = self.customToolClassDescriptor - self.customToolDescr = descrClass( - moduleElem, attrs, self) + if not self.tool: + klass = self.descriptorClasses['tool'] + self.tool = klass(moduleElem, attrs, self) + else: + self.tool.update(moduleElem, attrs) elif issubclass(moduleElem, Flavour): - descrClass = self.customFlavourClassDescriptor - self.customFlavourDescr = descrClass( - moduleElem, attrs, self) + if not self.flavour: + klass = self.descriptorClasses['flavour'] + self.flavour = klass(moduleElem, attrs, self) + else: + self.flavour.update(moduleElem, attrs) else: - descrClass = self.classDescriptor - self.classes.append( - descrClass(moduleElem, attrs, self)) + descriptorClass = self.descriptorClasses['class'] + descriptor = descriptorClass(moduleElem,attrs, self) + self.classes.append(descriptor) + # Manage classes containing tests if self.containsTests(moduleElem): self.modulesWithTests.add(moduleObj.__name__) elif appyType == 'workflow': - descrClass = self.workflowDescriptor - self.workflows.append( - descrClass(moduleElem, attrs, self)) + descriptorClass = self.descriptorClasses['workflow'] + descriptor = descriptorClass(moduleElem, attrs, self) + self.workflows.append(descriptor) if self.containsTests(moduleElem): self.modulesWithTests.add(moduleObj.__name__) elif isinstance(moduleElem, Config): @@ -331,8 +334,8 @@ class Generator: def run(self): self.walkApplication() - for classDescr in self.classes: self.generateClass(classDescr) - for wfDescr in self.workflows: self.generateWorkflow(wfDescr) + for descriptor in self.classes: self.generateClass(descriptor) + for descriptor in self.workflows: self.generateWorkflow(descriptor) self.finalize() msg = '' if self.totalNumberOfTests: diff --git a/gen/layout.py b/gen/layout.py new file mode 100644 index 0000000..ab7ecc2 --- /dev/null +++ b/gen/layout.py @@ -0,0 +1,188 @@ +'''This module contains classes used for layouting graphical elements + (fields, widgets, groups, ...).''' + +# A layout defines how a given field is rendered in a given context. Several +# contexts exist: +# "view" represents a given page for a given Appy class, in read-only mode. +# "edit" represents a given page for a given Appy class, in edit mode. +# "cell" represents a cell in a table, like when we need to render a field +# value in a query result or in a reference table. + +# Layout elements for a class or page ------------------------------------------ +# s - The page summary, containing summarized information about the page or +# class, workflow information and object history. +# w - The widgets of the current page/class +# n - The navigation panel (inter-objects navigation) +# b - The range of buttons (intra-object navigation, save, edit, delete...) +# m - The global status message sometimes shown. + +# Layout elements for a field -------------------------------------------------- +# l - "label" The field label +# d - "description" The field description (a description is always visible) +# h - "help" Help for the field (typically rendered as an icon, +# clicking on it shows a popup with online help +# v - "validation" The icon that is shown when a validation error occurs +# (typically only used on "edit" layouts) +# r - "required" The icon that specified that the field is required (if +# relevant; typically only used on "edit" layouts) +# f - "field" The field value, or input for entering a value. + +# For every field of a Appy class, you can define, for every layout context, +# what field-related information will appear, and how it will be rendered. +# Variables defaultPageLayouts and defaultFieldLayouts defined below give the +# default layouts for pages and fields respectively. +# +# How to express a layout? You simply define a string that is made of the +# letters corresponding to the field elements you want to render. The order of +# elements correspond to the order into which they will be rendered. + +# ------------------------------------------------------------------------------ +rowDelimiters = {'-':'middle', '=':'top', '_':'bottom'} +cellDelimiters = {'|': 'center', ';': 'left', '!': 'right'} +macroDict = { + # Page-related elements + 's': ('page', 'header'), 'w': ('page', 'widgets'), + 'n': ('navigate', 'objectNavigate'), 'b': ('page', 'buttons'), + 'm': ('page', 'message'), + # Field-related elements + 'l': ('show', 'label'), 'd': ('show', 'description'), + 'h': ('show', 'help'), 'v': ('show', 'validation'), + 'r': ('show', 'required') +} + +# ------------------------------------------------------------------------------ +class LayoutElement: + '''Abstract base class for any layout element.''' + def get(self): return self.__dict__ + +class Cell(LayoutElement): + '''Represents a cell in a row in a table.''' + def __init__(self, content, align, isHeader=False): + self.align = align + self.width = None + self.content = None + self.colspan = 1 + if isHeader: + self.width = content + else: + self.content = [] # The list of widgets to render in the cell + self.decodeContent(content) + + def decodeContent(self, content): + digits = '' # We collect the digits that will give the colspan + for char in content: + if char.isdigit(): + digits += char + else: + # It is a letter corresponding to a macro + if char in macroDict: + self.content.append(macroDict[char]) + elif char == 'f': + # The exact macro to call will be known at render-time + self.content.append('?') + # Manage the colspan + if digits: + self.colspan = int(digits) + +# ------------------------------------------------------------------------------ +class Row(LayoutElement): + '''Represents a row in a table.''' + def __init__(self, content, valign, isHeader=False): + self.valign = valign + self.cells = [] + self.decodeCells(content, isHeader) + # Compute the row length + length = 0 + for cell in self.cells: + length += cell['colspan'] + self.length = length + + def decodeCells(self, content, isHeader): + '''Decodes the given chunk of layout string p_content containing + column-related information (if p_isHeader is True) or cell content + (if p_isHeader is False) and produces a list of Cell instances.''' + cellContent = '' + for char in content: + if char in cellDelimiters: + align = cellDelimiters[char] + self.cells.append(Cell(cellContent, align, isHeader).get()) + cellContent = '' + else: + cellContent += char + # Manage the last cell if any + if cellContent: + self.cells.append(Cell(cellContent, 'left', isHeader).get()) + +# ------------------------------------------------------------------------------ +class Table(LayoutElement): + '''Represents a table where to dispose graphical elements.''' + def __init__(self, layoutString, style=None, css_class='', cellpadding=0, + cellspacing=0, width='100%', align='left'): + self.style = style + self.css_class = css_class + self.cellpadding = cellpadding + self.cellspacing = cellspacing + self.width = width + self.align = align + # The following attribute will store a special Row instance used for + # defining column properties. + self.headerRow = None + # The content rows are stored hereafter. + self.rows = [] + self.layoutString = layoutString + self.decodeRows(layoutString) + + def addCssClasses(self, css_class): + '''Adds a single or a group of p_css_class.''' + classes = self.css_class + if classes == None: + classes = '' + if not classes: + self.css_class = css_class + else: + self.css_class += ' ' + css_classes + # Ensures that every class appears once + self.css_class = ' '.join(set(self.css_class.split())) + + def isHeaderRow(self, rowContent): + '''Determines if p_rowContent specified the table header row or a + content row.''' + # Find the first char that is a number or a letter + for char in rowContent: + if char not in cellDelimiters: + if char.isdigit(): return True + else: return False + return True + + def decodeRows(self, layoutString): + '''Decodes the given p_layoutString and produces a list of Row + instances.''' + # Split the p_layoutString with the row delimiters + rowContent = '' + for char in layoutString: + if char in rowDelimiters: + valign = rowDelimiters[char] + if self.isHeaderRow(rowContent): + self.headerRow = Row(rowContent,valign,isHeader=True).get() + else: + self.rows.append(Row(rowContent, valign).get()) + rowContent = '' + else: + rowContent += char + # Manage the last row if any + if rowContent: + self.rows.append(Row(rowContent, 'middle').get()) + + def removeElement(self, elem): + '''Removes given p_elem from myself.''' + macroToRemove = macroDict[elem] + for row in self.rows: + for cell in row['cells']: + if macroToRemove in cell['content']: + cell['content'].remove(macroToRemove) + +# ------------------------------------------------------------------------------ +defaultPageLayouts = { + 'view': Table('m;-s|-n!-w;-b|'), 'edit': Table('m;-s|-n!-w;-b|')} +defaultFieldLayouts = {'view': 'l;f!', 'edit': 'lrv;f!'} +# ------------------------------------------------------------------------------ diff --git a/gen/odt/generator.py b/gen/odt/generator.py index c1f4ad2..2a57168 100644 --- a/gen/odt/generator.py +++ b/gen/odt/generator.py @@ -46,7 +46,7 @@ class Generator(AbstractGenerator): into the ODT file. This method returns the list of "dumpable" fields.''' res = [] - for fieldName, field in classDescr.getOrderedAppyAttributes(): + for fieldName, field, klass in classDescr.getOrderedAppyAttributes(): if (field.type not in self.undumpable) and \ (not self.fieldIsStaticallyInvisible(field)): res.append((fieldName, field)) diff --git a/gen/plone25/descriptors.py b/gen/plone25/descriptors.py index 2b03d03..bffb61a 100644 --- a/gen/plone25/descriptors.py +++ b/gen/plone25/descriptors.py @@ -18,7 +18,7 @@ from appy.gen.utils import GroupDescr, PageDescr, produceNiceMessage, \ TABS = 4 # Number of blanks in a Python indentation. # ------------------------------------------------------------------------------ -class ArchetypeFieldDescriptor: +class FieldDescriptor: '''This class allows to gather information needed to generate an Archetypes definition (field + widget) from an Appy type. An Appy type is used for defining the type of attributes defined in the user application.''' @@ -39,7 +39,6 @@ class ArchetypeFieldDescriptor: self.widgetParams = {} self.fieldType = None self.widgetType = None - self.walkAppyType() def __repr__(self): return '' % (self.fieldName, self.classDescr) @@ -59,8 +58,8 @@ class ArchetypeFieldDescriptor: return res def produceMessage(self, msgId, isLabel=True): - '''Gets the default label or description (if p_isLabel is False) for - i18n message p_msgId.''' + '''Gets the default label, description or help (depending on p_msgType) + for i18n message p_msgId.''' default = ' ' produceNice = False if isLabel: @@ -75,82 +74,22 @@ class ArchetypeFieldDescriptor: msg.produceNiceDefault() return msg - def walkBasicType(self): - '''How to dump a basic type?''' - self.fieldType = '%sField' % self.appyType.type - self.widgetType = "%sWidget" % self.appyType.type - if self.appyType.type == 'Date': - self.fieldType = 'DateTimeField' - self.widgetType = 'CalendarWidget' - if self.appyType.format == Date.WITHOUT_HOUR: - self.widgetParams['show_hm'] = False - self.widgetParams['starting_year'] = self.appyType.startYear - self.widgetParams['ending_year'] = self.appyType.endYear - elif self.appyType.type == 'Float': - self.widgetType = 'DecimalWidget' - elif self.appyType.type == 'File': - if self.appyType.isImage: - self.fieldType = 'ImageField' - self.widgetType = 'ImageWidget' - self.fieldParams['storage'] = 'python:AttributeStorage()' - def walkString(self): '''How to generate an Appy String?''' - if self.appyType.format == String.LINE: - if self.appyType.isSelection(): - if self.appyType.isMultiValued(): - self.fieldType = 'LinesField' - self.widgetType = 'MultiSelectionWidget' - self.fieldParams['multiValued'] = True - if (type(self.appyType.validator) in sequenceTypes) and \ - len(self.appyType.validator) <= 5: - self.widgetParams['format'] = 'checkbox' - else: - self.fieldType = 'StringField' - self.widgetType = 'SelectionWidget' - self.widgetParams['format'] = 'select' - # Elements common to all selection fields - methodName = 'list_%s_values' % self.fieldName - self.fieldParams['vocabulary'] = methodName - self.classDescr.addSelectMethod(methodName, self) - self.fieldParams['enforceVocabulary'] = True - else: - self.fieldType = 'StringField' - self.widgetType = 'StringWidget' - self.widgetParams['size'] = 50 - if self.appyType.width: - self.widgetParams['size'] = self.appyType.width - elif self.appyType.format == String.TEXT: - self.fieldType = 'TextField' - self.widgetType = 'TextAreaWidget' - if self.appyType.height: - self.widgetParams['rows'] = self.appyType.height - elif self.appyType.format == String.XHTML: - self.fieldType = 'TextField' - self.widgetType = 'RichWidget' - self.fieldParams['allowable_content_types'] = ('text/html',) - self.fieldParams['default_output_type'] = "text/html" - elif self.appyType.format == String.PASSWORD: - self.fieldType = 'StringField' - self.widgetType = 'PasswordWidget' - if self.appyType.width: - self.widgetParams['size'] = self.appyType.width - - def walkComputed(self): - '''How to generate a computed field? We generate an Archetypes String - field.''' - self.fieldType = 'StringField' - self.widgetType = 'StringWidget' - self.widgetParams['visible'] = False # Archetypes will believe the - # field is invisible; we will display it ourselves (like for Ref fields) + if self.appyType.isSelect and \ + (type(self.appyType.validator) in (list, tuple)): + # Generate i18n messages for every possible value if the list + # of values is fixed. + for value in self.appyType.validator: + msgLabel = '%s_%s_list_%s' % (self.classDescr.name, + self.fieldName, value) + poMsg = PoMessage(msgLabel, '', value) + poMsg.produceNiceDefault() + self.generator.labels.append(poMsg) def walkAction(self): '''How to generate an action field ? We generate an Archetypes String field.''' - self.fieldType = 'StringField' - self.widgetType = 'StringWidget' - self.widgetParams['visible'] = False # Archetypes will believe the - # field is invisible; we will display it ourselves (like for Ref fields) # Add action-specific i18n messages for suffix in ('ok', 'ko'): label = '%s_%s_action_%s' % (self.classDescr.name, self.fieldName, @@ -168,36 +107,22 @@ class ArchetypeFieldDescriptor: self.fieldParams['relationship'] = relationship if self.appyType.isMultiValued(): self.fieldParams['multiValued'] = True - self.widgetParams['visible'] = False # Update the list of referers self.generator.addReferer(self, relationship) # Add the widget label for the back reference - refClassName = ArchetypesClassDescriptor.getClassName( - self.appyType.klass) + refClassName = ClassDescriptor.getClassName(self.appyType.klass) if issubclass(self.appyType.klass, ModelClass): refClassName = self.applicationName + self.appyType.klass.__name__ elif issubclass(self.appyType.klass, appy.gen.Tool): refClassName = '%sTool' % self.applicationName elif issubclass(self.appyType.klass, appy.gen.Flavour): refClassName = '%sFlavour' % self.applicationName - backLabel = "%s_%s_back" % (refClassName, self.appyType.back.attribute) + backLabel = "%s_%s" % (refClassName, self.appyType.back.attribute) poMsg = PoMessage(backLabel, '', self.appyType.back.attribute) poMsg.produceNiceDefault() self.generator.labels.append(poMsg) - def walkInfo(self): - '''How to generate an Info field? We generate an Archetypes String - field.''' - self.fieldType = 'StringField' - self.widgetType = 'StringWidget' - self.widgetParams['visible'] = False # Archetypes will believe the - # field is invisible; we will display it ourselves (like for Ref fields) - def walkPod(self): - '''How to dump a Pod type?''' - self.fieldType = 'FileField' - self.widgetType = 'FileWidget' - self.fieldParams['storage'] = 'python:AttributeStorage()' # Add i18n-specific messages if self.appyType.askAction: label = '%s_%s_askaction' % (self.classDescr.name, self.fieldName) @@ -207,47 +132,23 @@ class ArchetypeFieldDescriptor: # Add the POD-related fields on the Flavour Flavour._appy_addPodRelatedFields(self) - alwaysAValidatorFor = ('Ref', 'Integer', 'Float') notToValidateFields = ('Info', 'Computed', 'Action', 'Pod') def walkAppyType(self): '''Walks into the Appy type definition and gathers data about the - Archetype elements to generate.''' + i18n labels.''' # Manage things common to all Appy types - # - special accessor for fields "title" and "description" - if self.fieldName in self.specialParams: - self.fieldParams['accessor'] = self.fieldName.capitalize() - # - default value - if self.appyType.default != None: - self.fieldParams['default'] = self.appyType.default - # - required? - if self.appyType.multiplicity[0] >= 1: - if self.appyType.type != 'Ref': self.fieldParams['required'] = True - # Indeed, if it is a ref appy will manage itself field updates in - # onEdit, so Archetypes must not enforce required=True # - optional ? if self.appyType.optional: Flavour._appy_addOptionalField(self) - self.widgetParams['condition'] = ' python: ' \ - 'here.fieldIsUsed("%s")'% self.fieldName # - edit default value ? if self.appyType.editDefault: Flavour._appy_addDefaultField(self) - methodName = 'getDefaultValueFor%s' % self.fieldName - self.fieldParams['default_method'] = methodName - self.classDescr.addDefaultMethod(methodName, self) # - put an index on this field? - if self.appyType.indexed: - if (self.appyType.type == 'String') and (self.appyType.isSelect): - self.fieldParams['index'] = 'ZCTextIndex, lexicon_id=' \ - 'plone_lexicon, index_type=Okapi BM25 Rank' - else: - self.fieldParams['index'] = 'FieldIndex' - # - searchable ? - if self.appyType.searchable: self.fieldParams['searchable'] = True - # - slaves ? - if self.appyType.slaves: self.widgetParams['visible'] = False - # Archetypes will believe the field is invisible; we will display it - # ourselves (like for Ref fields). + if self.appyType.indexed and \ + (self.fieldName not in ('title', 'description')): + self.classDescr.addIndexMethod(self) + # - searchable ? TODO + #if self.appyType.searchable: self.fieldParams['searchable'] = True # - need to generate a field validator? # In all cases excepted for "immutable" fields, add an i18n message for # the validation error for this field. @@ -255,43 +156,18 @@ class ArchetypeFieldDescriptor: label = '%s_%s_valid' % (self.classDescr.name, self.fieldName) poMsg = PoMessage(label, '', PoMessage.DEFAULT_VALID_ERROR) self.generator.labels.append(poMsg) - # Generate a validator for the field if needed. - if (type(self.appyType.validator) == types.FunctionType) or \ - (type(self.appyType.validator) == type(String.EMAIL)) or \ - (self.appyType.type in self.alwaysAValidatorFor): - # For references, we always add a validator because gen validates - # itself things like multiplicities; - # For integers and floats, we also need validators because, by - # default, Archetypes produces an exception if the field value does - # not have the correct type, for example. - methodName = 'validate_%s' % self.fieldName - # Add a validate method for this - specificType = None - if self.appyType.type in self.alwaysAValidatorFor: - specificType = self.appyType.type - self.classDescr.addValidateMethod(methodName, label, self, - specificType=specificType) - # Manage specific permissions - permFieldName = '%s %s' % (self.classDescr.name, self.fieldName) - if self.appyType.specificReadPermission: - self.fieldParams['read_permission'] = '%s: Read %s' % \ - (self.generator.applicationName, permFieldName) - if self.appyType.specificWritePermission: - self.fieldParams['write_permission'] = '%s: Write %s' % \ - (self.generator.applicationName, permFieldName) # i18n labels i18nPrefix = "%s_%s" % (self.classDescr.name, self.fieldName) - wp = self.widgetParams - wp['label'] = self.fieldName - wp['label_msgid'] = '%s' % i18nPrefix - wp['description'] = '%sDescr' % i18nPrefix - wp['description_msgid'] = '%s_descr' % i18nPrefix - wp['i18n_domain'] = self.applicationName # Create labels for generating them in i18n files. messages = self.generator.labels - messages.append(self.produceMessage(wp['label_msgid'])) - messages.append(self.produceMessage(wp['description_msgid'], - isLabel=False)) + if self.appyType.hasLabel: + messages.append(self.produceMessage(i18nPrefix)) + if self.appyType.hasDescr: + descrId = i18nPrefix + '_descr' + messages.append(self.produceMessage(descrId,isLabel=False)) + if self.appyType.hasHelp: + helpId = i18nPrefix + '_help' + messages.append(self.produceMessage(helpId, isLabel=False)) # Create i18n messages linked to pages and phases messages = self.generator.labels pageMsgId = '%s_page_%s' % (self.classDescr.name, self.appyType.page) @@ -305,34 +181,22 @@ class ArchetypeFieldDescriptor: messages.append(poMsg) self.classDescr.labelsToPropagate.append(poMsg) # Create i18n messages linked to groups - if self.appyType.group: - groupName, cols = GroupDescr.getGroupInfo(self.appyType.group) - msgId = '%s_group_%s' % (self.classDescr.name, groupName) - poMsg = PoMessage(msgId, '', groupName) - poMsg.produceNiceDefault() - if poMsg not in messages: - messages.append(poMsg) - self.classDescr.labelsToPropagate.append(poMsg) - # Manage schemata - if self.appyType.page != 'main': - self.fieldParams['schemata'] = self.appyType.page - # Manage things which are specific to basic types - if self.appyType.type in self.singleValuedTypes: self.walkBasicType() + group = self.appyType.group + if group: + group.generateLabels(messages, self.classDescr, set()) # Manage things which are specific to String types - elif self.appyType.type == 'String': self.walkString() - # Manage things which are specific to Computed types - elif self.appyType.type == 'Computed': self.walkComputed() + if self.appyType.type == 'String': self.walkString() # Manage things which are specific to Actions elif self.appyType.type == 'Action': self.walkAction() # Manage things which are specific to Ref types elif self.appyType.type == 'Ref': self.walkRef() - # Manage things which are specific to Info types - elif self.appyType.type == 'Info': self.walkInfo() # Manage things which are specific to Pod types elif self.appyType.type == 'Pod': self.walkPod() def generate(self): - '''Produces the Archetypes field definition as a string.''' + '''Generates the i18n labels for this type.''' + self.walkAppyType() + if self.appyType.type != 'Ref': return res = '' s = stringify spaces = TABS @@ -376,89 +240,41 @@ class ClassDescriptor(appy.gen.descriptors.ClassDescriptor): # for child classes of this class as well, but at this time we don't # know yet every sub-class. So we store field definitions here; the # Generator will propagate them later. + self.name = self.getClassName(klass) + self.predefined = False + self.customized = False - def generateSchema(self): - '''Generates the corresponding Archetypes schema in self.schema.''' + def getParents(self, allClasses): + parentWrapper = 'AbstractWrapper' + parentClass = '%s.%s' % (self.klass.__module__, self.klass.__name__) + if self.klass.__bases__: + baseClassName = self.klass.__bases__[0].__name__ + for k in allClasses: + if self.klass.__name__ == baseClassName: + parentWrapper = '%s_Wrapper' % k.name + return (parentWrapper, parentClass) + + def generateSchema(self, configClass=False): + '''Generates the corresponding Archetypes schema in self.schema. If we + are generating a schema for a class that is in the configuration + (tool, flavour, etc) we must avoid having attributes that rely on + the configuration (ie attributes that are optional, with + editDefault=True, etc).''' for attrName in self.orderedAttributes: - attrValue = getattr(self.klass, attrName) + try: + attrValue = getattr(self.klass, attrName) + except AttributeError: + attrValue = getattr(self.modelClass, attrName) if isinstance(attrValue, Type): - field = ArchetypeFieldDescriptor(attrName, attrValue, self) - self.schema += '\n' + field.generate() - - def addSelectMethod(self, methodName, fieldDescr): - '''For the selection field p_fieldDescr I need to generate a method - named p_methodName that will generate the vocabulary for - p_fieldDescr.''' - # Generate the method signature - m = self.methods - s = stringify - spaces = TABS - m += '\n' + ' '*spaces + 'def %s(self):\n' % methodName - spaces += TABS - appyType = fieldDescr.appyType - if type(appyType.validator) in (list, tuple): - # Generate i18n messages for every possible value - f = fieldDescr - labels = [] - for value in appyType.validator: - msgLabel = '%s_%s_list_%s' % (f.classDescr.name, f.fieldName, - value) - labels.append(msgLabel) # I will need it later - poMsg = PoMessage(msgLabel, '', value) - poMsg.produceNiceDefault() - self.generator.labels.append(poMsg) - # Generate a method that returns a DisplayList - appName = self.generator.applicationName - allValues = appyType.validator - if not appyType.isMultiValued(): - allValues = [''] + appyType.validator - labels.insert(0, 'choose_a_value') - m += ' '*spaces + 'return self._appy_getDisplayList' \ - '(%s, %s, %s)\n' % (s(allValues), s(labels), s(appName)) - elif isinstance(appyType.validator, Selection): - # Call the custom method that will produce dynamically the list of - # values. - m += ' '*spaces + 'return self._appy_getDynamicDisplayList' \ - '(%s)\n' % s(appyType.validator.methodName) - self.methods = m - - def addValidateMethod(self, methodName, label, fieldDescr, - specificType=None): - '''For the field p_fieldDescr I need to generate a validation method. - If p_specificType is not None, it corresponds to the name of a type - like Ref, Integer or Float, for which specific validation is needed, - beyond the potential custom validation specified by a user-defined - validator method.''' - # Generate the method signature - m = self.methods - s = stringify - spaces = TABS - m += '\n' + ' '*spaces + 'def %s(self, value):\n' % methodName - spaces += TABS - m += ' '*spaces + 'return self._appy_validateField(%s, value, %s, ' \ - '%s)\n' % (s(fieldDescr.fieldName), s(label), s(specificType)) - self.methods = m - - def addDefaultMethod(self, methodName, fieldDescr): - '''When the default value of a field may be edited, we must add a method - that will gather the default value from the flavour.''' - m = self.methods - spaces = TABS - m += '\n' + ' '*spaces + 'def %s(self):\n' % methodName - spaces += TABS - m += ' '*spaces + 'return self.getDefaultValueFor("%s")\n' % \ - fieldDescr.fieldName - self.methods = m - -class ArchetypesClassDescriptor(ClassDescriptor): - '''Represents an Archetypes-compliant class that corresponds to an - application class.''' - predefined = False - def __init__(self, klass, orderedAttributes, generator): - ClassDescriptor.__init__(self, klass, orderedAttributes, generator) - if not hasattr(self, 'name'): - self.name = self.getClassName(klass) - self.generateSchema() + if configClass: + attrValue = copy.copy(attrValue) + attrValue.optional = False + attrValue.editDefault = False + field = FieldDescriptor(attrName, attrValue, self) + fieldDef = field.generate() + if fieldDef: + # Currently, we generate Archetypes fields for Refs only. + self.schema += '\n' + fieldDef @staticmethod def getClassName(klass): @@ -502,6 +318,13 @@ class ArchetypesClassDescriptor(ClassDescriptor): res = self.isFolder(theClass.__bases__[0]) return res + def getCreators(self): + '''Gets the specific creators defined for this class.''' + res = [] + if self.klass.__dict__.has_key('creators') and self.klass.creators: + res += list(self.klass.creators) + return res + def getCreateMean(self, type='Import'): '''Returns the mean for this class that corresponds to p_type, or None if the class does not support this create mean.''' @@ -534,75 +357,87 @@ class ArchetypesClassDescriptor(ClassDescriptor): @staticmethod def getSearch(klass, searchName): '''Gets the search named p_searchName.''' - for search in ArchetypesClassDescriptor.getSearches(klass): + for search in ClassDescriptor.getSearches(klass): if search.name == searchName: return search return None -class ToolClassDescriptor(ClassDescriptor): - '''Represents the POD-specific fields that must be added to the tool.''' - predefined = True - def __init__(self, klass, generator): - ClassDescriptor.__init__(self, klass, klass._appy_attributes, generator) - self.name = '%sTool' % generator.applicationName - def isFolder(self, klass=None): return True - def isRoot(self): return False - def addUnoValidator(self): + def addIndexMethod(self, field): + '''For indexed p_field, this method generates a method that allows to + get the value of the field as must be copied into the corresponding + index.''' m = self.methods spaces = TABS - m += '\n' + ' '*spaces + 'def validate_unoEnabledPython(self, value):\n' + n = field.fieldName + m += '\n' + ' '*spaces + 'def get%s%s(self):\n' % (n[0].upper(), n[1:]) spaces += TABS - m += ' '*spaces + 'return self._appy_validateUnoEnabledPython(value)\n' + m += ' '*spaces + "'''Gets indexable value of field \"%s\".'''\n" % n + m += ' '*spaces + 'return self.getAppyType("%s").getValue(self)\n' % n self.methods = m + +class ToolClassDescriptor(ClassDescriptor): + '''Represents the POD-specific fields that must be added to the tool.''' + def __init__(self, klass, generator): + ClassDescriptor.__init__(self,klass,klass._appy_attributes[:],generator) + self.name = '%sTool' % generator.applicationName + self.modelClass = self.klass + self.predefined = True + self.customized = False + def getParents(self, allClasses=()): + res = ['Tool'] + if self.customized: + res.append('%s.%s' % (self.klass.__module__, self.klass.__name__)) + return res + def update(self, klass, attributes): + '''This method is called by the generator when he finds a custom tool + definition. We must then add the custom tool elements in this default + Tool descriptor.''' + self.orderedAttributes += attributes + self.klass = klass + self.customized = True + def isFolder(self, klass=None): return True + def isRoot(self): return False def generateSchema(self): - ClassDescriptor.generateSchema(self) - self.addUnoValidator() + ClassDescriptor.generateSchema(self, configClass=True) class FlavourClassDescriptor(ClassDescriptor): '''Represents an Archetypes-compliant class that corresponds to the Flavour for the generated application.''' - predefined = True def __init__(self, klass, generator): - ClassDescriptor.__init__(self, klass, klass._appy_attributes, generator) + ClassDescriptor.__init__(self,klass,klass._appy_attributes[:],generator) self.name = '%sFlavour' % generator.applicationName self.attributesByClass = klass._appy_classes - # We don't generate the schema automatically here because we need to - # add more fields. + self.modelClass = self.klass + self.predefined = True + self.customized = False + def getParents(self, allClasses=()): + res = ['Flavour'] + if self.customized: + res.append('%s.%s' % (self.klass.__module__, self.klass.__name__)) + return res + def update(self, klass, attributes): + '''This method is called by the generator when he finds a custom flavour + definition. We must then add the custom flavour elements in this + default Flavour descriptor.''' + self.orderedAttributes += attributes + self.klass = klass + self.customized = True def isFolder(self, klass=None): return True def isRoot(self): return False + def generateSchema(self): + ClassDescriptor.generateSchema(self, configClass=True) class PodTemplateClassDescriptor(ClassDescriptor): '''Represents a POD template.''' - predefined = True def __init__(self, klass, generator): - ClassDescriptor.__init__(self, klass, klass._appy_attributes, generator) + ClassDescriptor.__init__(self,klass,klass._appy_attributes[:],generator) self.name = '%sPodTemplate' % generator.applicationName + self.modelClass = self.klass + self.predefined = True + self.customized = False + def getParents(self, allClasses=()): return ['PodTemplate'] def isRoot(self): return False -class CustomToolClassDescriptor(ArchetypesClassDescriptor): - '''If the user defines a class that inherits from Tool, we will add those - fields to the tool.''' - predefined = False - def __init__(self, *args): - self.name = '%sTool' % args[2].applicationName - ArchetypesClassDescriptor.__init__(self, *args) - def generateSchema(self): - '''Custom tool fields may not use the variability mechanisms, ie - 'optional' or 'editDefault' attributes.''' - for attrName in self.orderedAttributes: - attrValue = getattr(self.klass, attrName) - if isinstance(attrValue, Type): - attrValue = copy.copy(attrValue) - attrValue.optional = False - attrValue.editDefault = False - field = ArchetypeFieldDescriptor(attrName, attrValue, self) - self.schema += '\n' + field.generate() - -class CustomFlavourClassDescriptor(CustomToolClassDescriptor): - def __init__(self, *args): - self.name = '%sFlavour' % args[2].applicationName - ArchetypesClassDescriptor.__init__(self, *args) - class WorkflowDescriptor(appy.gen.descriptors.WorkflowDescriptor): '''Represents a workflow.''' # How to map Appy permissions to Plone permissions ? diff --git a/gen/plone25/generator.py b/gen/plone25/generator.py index c45d460..ca370b1 100644 --- a/gen/plone25/generator.py +++ b/gen/plone25/generator.py @@ -8,10 +8,9 @@ from appy.gen import * from appy.gen.po import PoMessage, PoFile, PoParser from appy.gen.generator import Generator as AbstractGenerator from model import ModelClass, PodTemplate, Flavour, Tool -from descriptors import ArchetypeFieldDescriptor, ArchetypesClassDescriptor, \ +from descriptors import FieldDescriptor, ClassDescriptor, \ WorkflowDescriptor, ToolClassDescriptor, \ - FlavourClassDescriptor, PodTemplateClassDescriptor, \ - CustomToolClassDescriptor, CustomFlavourClassDescriptor + FlavourClassDescriptor, PodTemplateClassDescriptor # Common methods that need to be defined on every Archetype class -------------- COMMON_METHODS = ''' @@ -30,6 +29,13 @@ class Generator(AbstractGenerator): def __init__(self, *args, **kwargs): Flavour._appy_clean() AbstractGenerator.__init__(self, *args, **kwargs) + # Set our own Descriptor classes + self.descriptorClasses['class'] = ClassDescriptor + self.descriptorClasses['workflow'] = WorkflowDescriptor + # Create our own Tool, Flavour and PodTemplate instances + self.tool = ToolClassDescriptor(Tool, self) + self.flavour = FlavourClassDescriptor(Flavour, self) + self.podTemplate = PodTemplateClassDescriptor(PodTemplate, self) # i18n labels to generate self.labels = [] # i18n labels self.toolName = '%sTool' % self.applicationName @@ -50,19 +56,10 @@ class Generator(AbstractGenerator): 'toolInstanceName': self.toolInstanceName, 'podTemplateName': self.podTemplateName, 'commonMethods': commonMethods}) - # Predefined class descriptors - self.toolDescr = ToolClassDescriptor(Tool, self) - self.flavourDescr = FlavourClassDescriptor(Flavour, self) - self.podTemplateDescr = PodTemplateClassDescriptor(PodTemplate,self) self.referers = {} versionRex = re.compile('(.*?\s+build)\s+(\d+)') def initialize(self): - # Use customized class descriptors - self.classDescriptor = ArchetypesClassDescriptor - self.workflowDescriptor = WorkflowDescriptor - self.customToolClassDescriptor = CustomToolClassDescriptor - self.customFlavourClassDescriptor = CustomFlavourClassDescriptor # Determine version number of the Plone product self.version = '0.1 build 1' versionTxt = os.path.join(self.outputFolder, 'version.txt') @@ -91,6 +88,7 @@ class Generator(AbstractGenerator): poMsg = msg(app, '', app); poMsg.produceNiceDefault() self.labels += [poMsg, msg('workflow_state', '', msg.WORKFLOW_STATE), + msg('appy_title', '', msg.APPY_TITLE), msg('data_change', '', msg.DATA_CHANGE), msg('modified_field', '', msg.MODIFIED_FIELD), msg('previous_value', '', msg.PREVIOUS_VALUE), @@ -127,11 +125,12 @@ class Generator(AbstractGenerator): msg('search_or', '', msg.SEARCH_OR), msg('search_and', '', msg.SEARCH_AND), msg('ref_invalid_index', '', msg.REF_INVALID_INDEX), - msg('bad_int', '', msg.BAD_INT), + msg('bad_long', '', msg.BAD_LONG), msg('bad_float', '', msg.BAD_FLOAT), msg('bad_email', '', msg.BAD_EMAIL), msg('bad_url', '', msg.BAD_URL), msg('bad_alphanumeric', '', msg.BAD_ALPHANUMERIC), + msg('bad_select_value', '', msg.BAD_SELECT_VALUE), msg('select_delesect', '', msg.SELECT_DESELECT), msg('no_elem_selected', '', msg.NO_SELECTION), msg('delete_confirm', '', msg.DELETE_CONFIRM), @@ -145,6 +144,9 @@ class Generator(AbstractGenerator): msg('confirm', '', msg.CONFIRM), msg('yes', '', msg.YES), msg('no', '', msg.NO), + msg('field_required', '', msg.FIELD_REQUIRED), + msg('file_required', '', msg.FILE_REQUIRED), + msg('image_required', '', msg.IMAGE_REQUIRED), ] # Create basic files (config.py, Install.py, etc) self.generateTool() @@ -229,10 +231,10 @@ class Generator(AbstractGenerator): ploneRoles = ('Manager', 'Member', 'Owner', 'Reviewer') def getAllUsedRoles(self, appOnly=False): - '''Produces a list of all the roles used within all workflows defined - in this application. If p_appOnly is True, it returns only roles - which are specific to this application (ie it removes predefined - Plone roles like Member, Manager, etc.''' + '''Produces a list of all the roles used within all workflows and + classes defined in this application. If p_appOnly is True, it + returns only roles which are specific to this application (ie it + removes predefined Plone roles like Member, Manager, etc.''' res = [] for wfDescr in self.workflows: # Browse states and transitions @@ -241,6 +243,8 @@ class Generator(AbstractGenerator): if isinstance(attrValue, State) or \ isinstance(attrValue, Transition): res += attrValue.getUsedRoles() + for cDescr in self.getClasses(include='all'): + res += cDescr.getCreators() res = list(set(res)) if appOnly: for ploneRole in self.ploneRoles: @@ -259,28 +263,22 @@ class Generator(AbstractGenerator): elif issubclass(k, appy.gen.Flavour): refClassName = '%sFlavour' % self.applicationName else: - refClassName = ArchetypesClassDescriptor.getClassName(k) + refClassName = ClassDescriptor.getClassName(k) if not self.referers.has_key(refClassName): self.referers[refClassName] = [] self.referers[refClassName].append( (fieldDescr, relationship)) + def getAppyTypePath(self, name, appyType, klass, isBack=False): + '''Gets the path to the p_appyType when a direct reference to an + appyType must be generated in a Python file.''' + if issubclass(klass, ModelClass): + res = 'wraps.%s.%s' % (klass.__name__, name) + else: + res = '%s.%s.%s' % (klass.__module__, klass.__name__, name) + if isBack: res += '.back' + return res + def generateConfig(self): - # Compute referers - referers = '' - for className, refInfo in self.referers.iteritems(): - referers += '"%s":[' % className - for fieldDescr, relationship in refInfo: - refClass = fieldDescr.classDescr.klass - if issubclass(refClass, ModelClass): - refClassName = 'Extensions.appyWrappers.%s' % \ - refClass.__name__ - else: - refClassName = '%s.%s' % (refClass.__module__, - refClass.__name__) - referers += '(%s.%s' % (refClassName, fieldDescr.fieldName) - referers += ',"%s"' % relationship - referers += '),' - referers += '],\n' # Compute workflow instances initialisation wfInit = '' for workflowDescr in self.workflows: @@ -301,21 +299,11 @@ class Generator(AbstractGenerator): wfInit += 'workflowInstances[%s] = wf\n' % className # Compute imports imports = ['import %s' % self.applicationName] - classDescrs = self.classes[:] - if self.customToolDescr: - classDescrs.append(self.customToolDescr) - if self.customFlavourDescr: - classDescrs.append(self.customFlavourDescr) + classDescrs = self.getClasses(include='custom') for classDescr in (classDescrs + self.workflows): theImport = 'import %s' % classDescr.klass.__module__ if theImport not in imports: imports.append(theImport) - # Compute ordered lists of attributes for every Appy class. - attributes = [] - for classDescr in classDescrs: - classAttrs = [a[0] for a in classDescr.getOrderedAppyAttributes()] - attrs = ','.join([('"%s"' % a) for a in classAttrs]) - attributes.append('"%s":[%s]' % (classDescr.name, attrs)) # Compute root classes rootClasses = '' for classDescr in self.classes: @@ -327,14 +315,49 @@ class Generator(AbstractGenerator): addPermissions += ' "%s":"%s: Add %s",\n' % (classDescr.name, self.applicationName, classDescr.name) repls = self.repls.copy() + # Compute the list of ordered attributes (foward and backward, inherited + # included) for every Appy class. + attributes = [] + attributesDict = [] + for classDescr in self.getClasses(include='all'): + titleFound = False + attrs = [] + attrNames = [] + for name, appyType, klass in classDescr.getOrderedAppyAttributes(): + attrs.append(self.getAppyTypePath(name, appyType, klass)) + attrNames.append(name) + if name == 'title': titleFound = True + # Add the "title" mandatory field if not found + if not titleFound: + attrs.insert(0, 'copy.deepcopy(appy.gen.title)') + attrNames.insert(0, 'title') + # Any backward attributes to append? + if classDescr.name in self.referers: + for field, rel in self.referers[classDescr.name]: + try: + getattr(field.classDescr.klass, field.fieldName) + klass = field.classDescr.klass + except AttributeError: + klass = field.classDescr.modelClass + attrs.append(self.getAppyTypePath(field.fieldName, + field.appyType, klass, isBack=True)) + attrNames.append(field.appyType.back.attribute) + attributes.append('"%s":[%s]' % (classDescr.name,','.join(attrs))) + aDict = '' + i = -1 + for attr in attrs: + i += 1 + aDict += '"%s":attributes["%s"][%d],' % \ + (attrNames[i], classDescr.name, i) + attributesDict.append('"%s":{%s}' % (classDescr.name, aDict)) # Compute list of used roles for registering them if needed repls['roles'] = ','.join(['"%s"' % r for r in \ self.getAllUsedRoles(appOnly=True)]) repls['rootClasses'] = rootClasses - repls['referers'] = referers repls['workflowInstancesInit'] = wfInit repls['imports'] = '\n'.join(imports) repls['attributes'] = ',\n '.join(attributes) + repls['attributesDict'] = ',\n '.join(attributesDict) repls['defaultAddRoles'] = ','.join( ['"%s"' % r for r in self.config.defaultCreators]) repls['addPermissions'] = addPermissions @@ -342,15 +365,16 @@ class Generator(AbstractGenerator): def generateInit(self): # Compute imports - imports = [' import %s' % self.toolName, - ' import %s' % self.flavourName, - ' import %s' % self.podTemplateName] - for c in self.classes: + imports = [] + classNames = [] + for c in self.getClasses(include='all'): importDef = ' import %s' % c.name if importDef not in imports: imports.append(importDef) + classNames.append("%s.%s" % (c.name, c.name)) repls = self.repls.copy() repls['imports'] = '\n'.join(imports) + repls['classes'] = ','.join(classNames) repls['totalNumberOfTests'] = self.totalNumberOfTests self.copyFile('__init__.py', repls) @@ -380,12 +404,7 @@ class Generator(AbstractGenerator): "['portal_catalog']\n" % blackClass # Compute workflows workflows = '' - allClasses = self.classes[:] - if self.customToolDescr: - allClasses.append(self.customToolDescr) - if self.customFlavourDescr: - allClasses.append(self.customFlavourDescr) - for classDescr in allClasses: + for classDescr in self.getClasses(include='all'): if hasattr(classDescr.klass, 'workflow'): wfName = WorkflowDescriptor.getWorkflowName( classDescr.klass.workflow) @@ -437,41 +456,31 @@ class Generator(AbstractGenerator): repls['workflows'] = workflows self.copyFile('workflows.py', repls, destFolder='Extensions') - def generateWrapperProperty(self, attrName, appyType): - '''Generates the getter for attribute p_attrName having type - p_appyType.''' - res = ' def get_%s(self):\n' % attrName - blanks = ' '*8 - getterName = 'get%s%s' % (attrName[0].upper(), attrName[1:]) - if isinstance(appyType, Ref): - res += blanks + 'return self.o._appy_getRefs("%s", ' \ - 'noListIfSingleObj=True).objects\n' % attrName - elif isinstance(appyType, Computed): - res += blanks + 'appyType = getattr(self.klass, "%s")\n' % attrName - res += blanks + 'return self.o.getComputedValue(' \ - 'appyType.__dict__)\n' - elif isinstance(appyType, File): - res += blanks + 'v = self.o.%s()\n' % getterName - res += blanks + 'if not v: return None\n' - res += blanks + 'else: return FileWrapper(v)\n' - elif isinstance(appyType, String) and appyType.isMultiValued(): - res += blanks + 'return list(self.o.%s())\n' % getterName + def generateWrapperProperty(self, name): + '''Generates the getter for attribute p_name.''' + res = ' def get_%s(self):\n ' % name + if name == 'title': + res += 'return self.o.Title()\n' else: - if attrName in ArchetypeFieldDescriptor.specialParams: - getterName = attrName.capitalize() - res += blanks + 'return self.o.%s()\n' % getterName - res += ' %s = property(get_%s)\n\n' % (attrName, attrName) + res += 'return self.o.getAppyType("%s").getValue(self.o)\n' % name + res += ' %s = property(get_%s)\n\n' % (name, name) return res - def generateWrapperPropertyBack(self, attrName, rel): - '''Generates a wrapper property for accessing the back reference named - p_attrName through Archetypes relationship p_rel.''' - res = ' def get_%s(self):\n' % attrName - blanks = ' '*8 - res += blanks + 'return self.o._appy_getRefsBack("%s", "%s", ' \ - 'noListIfSingleObj=True)\n' % (attrName, rel) - res += ' %s = property(get_%s)\n\n' % (attrName, attrName) - return res + def getClasses(self, include=None): + '''Returns the descriptors for all the classes in the generated + gen-application. If p_include is "all", it includes the descriptors + for the config-related classes (tool, flavour, etc); if + p_include is "custom", it includes descriptors for the + config-related classes for which the user has created a sub-class.''' + if not include: return self.classes + else: + res = self.classes[:] + configClasses = [self.tool, self.flavour, self.podTemplate] + if include == 'all': + res += configClasses + elif include == 'custom': + res += [c for c in configClasses if c.customized] + return res def getClassesInOrder(self, allClasses): '''When generating wrappers, classes mut be dumped in order (else, it @@ -506,60 +515,48 @@ class Generator(AbstractGenerator): # We must generate imports and wrapper definitions imports = [] wrappers = [] - allClasses = self.classes[:] - # Add predefined classes (Tool, Flavour, PodTemplate) - allClasses += [self.toolDescr, self.flavourDescr, self.podTemplateDescr] - if self.customToolDescr: - allClasses.append(self.customToolDescr) - if self.customFlavourDescr: - allClasses.append(self.customFlavourDescr) + allClasses = self.getClasses(include='all') for c in self.getClassesInOrder(allClasses): - if not c.predefined: + if not c.predefined or c.customized: moduleImport = 'import %s' % c.klass.__module__ if moduleImport not in imports: imports.append(moduleImport) # Determine parent wrapper and class - parentWrapper = 'AbstractWrapper' - parentClass = '%s.%s' % (c.klass.__module__, c.klass.__name__) - if c.predefined: - parentClass = c.klass.__name__ - if c.klass.__bases__: - baseClassName = c.klass.__bases__[0].__name__ - for k in allClasses: - if k.klass.__name__ == baseClassName: - parentWrapper = '%s_Wrapper' % k.name - wrapperDef = 'class %s_Wrapper(%s, %s):\n' % \ - (c.name, parentWrapper, parentClass) + parentClasses = c.getParents(allClasses) + wrapperDef = 'class %s_Wrapper(%s):\n' % \ + (c.name, ','.join(parentClasses)) wrapperDef += ' security = ClassSecurityInfo()\n' titleFound = False for attrName in c.orderedAttributes: if attrName == 'title': titleFound = True - attrValue = getattr(c.klass, attrName) + try: + attrValue = getattr(c.klass, attrName) + except AttributeError: + attrValue = getattr(c.modelClass, attrName) if isinstance(attrValue, Type): - wrapperDef += self.generateWrapperProperty(attrName, - attrValue) + wrapperDef += self.generateWrapperProperty(attrName) # Generate properties for back references if self.referers.has_key(c.name): for refDescr, rel in self.referers[c.name]: attrName = refDescr.appyType.back.attribute - wrapperDef += self.generateWrapperPropertyBack(attrName,rel) + wrapperDef += self.generateWrapperProperty(attrName) if not titleFound: # Implicitly, the title will be added by Archetypes. So I need # to define a property for it. - wrapperDef += self.generateWrapperProperty('title', String()) - if isinstance(c, CustomToolClassDescriptor) or \ - isinstance(c, CustomFlavourClassDescriptor): + wrapperDef += self.generateWrapperProperty('title') + if c.customized: # For custom tool and flavour, add a call to a method that # allows to customize elements from the base class. wrapperDef += " if hasattr(%s, 'update'):\n " \ - "%s.update(%s.__bases__[1])\n" % ( - parentClass, parentClass, parentWrapper) + "%s.update(%s)\n" % (parentClasses[1], parentClasses[1], + parentClasses[0]) # For custom tool and flavour, add security declaration that # will allow to call their methods from ZPTs. - wrapperDef += " for elem in dir(%s):\n " \ - "if not elem.startswith('_'): security.declarePublic" \ - "(elem)\n" % (parentClass) + for parentClass in parentClasses: + wrapperDef += " for elem in dir(%s):\n " \ + "if not elem.startswith('_'): security.declarePublic" \ + "(elem)\n" % (parentClass) # Register the class in Zope. wrapperDef += 'InitializeClass(%s_Wrapper)\n' % c.name wrappers.append(wrapperDef) @@ -587,20 +584,12 @@ class Generator(AbstractGenerator): repls = self.repls.copy() # Manage predefined fields Tool.flavours.klass = Flavour - if self.customFlavourDescr: - Tool.flavours.klass = self.customFlavourDescr.klass - self.toolDescr.generateSchema() - repls['predefinedFields'] = self.toolDescr.schema - repls['predefinedMethods'] = self.toolDescr.methods - # Manage custom fields - repls['fields'] = '' - repls['methods'] = '' - repls['wrapperClass'] = '%s_Wrapper' % self.toolDescr.name - if self.customToolDescr: - repls['fields'] = self.customToolDescr.schema - repls['methods'] = self.customToolDescr.methods - wrapperClass = '%s_Wrapper' % self.customToolDescr.name - repls['wrapperClass'] = wrapperClass + if self.flavour.customized: + Tool.flavours.klass = self.flavour.klass + self.tool.generateSchema() + repls['fields'] = self.tool.schema + repls['methods'] = self.tool.methods + repls['wrapperClass'] = '%s_Wrapper' % self.tool.name self.copyFile('ToolTemplate.py', repls, destName='%s.py'% self.toolName) repls = self.repls.copy() # Create i18n-related messages @@ -623,35 +612,32 @@ class Generator(AbstractGenerator): importMean = classDescr.getCreateMean('Import') if importMean: Flavour._appy_addImportRelatedFields(classDescr) - Flavour._appy_addWorkflowFields(self.flavourDescr) - Flavour._appy_addWorkflowFields(self.podTemplateDescr) + Flavour._appy_addWorkflowFields(self.flavour) + Flavour._appy_addWorkflowFields(self.podTemplate) + # Complete self.flavour.orderedAttributes from the attributes that we + # just added to the Flavour model class. + for fieldName in Flavour._appy_attributes: + if fieldName not in self.flavour.orderedAttributes: + self.flavour.orderedAttributes.append(fieldName) # Generate the flavour class and related i18n messages - self.flavourDescr.generateSchema() + self.flavour.generateSchema() self.labels += [ Msg(self.flavourName, '', Msg.FLAVOUR), Msg('%s_edit_descr' % self.flavourName, '', ' ')] repls = self.repls.copy() - repls['predefinedFields'] = self.flavourDescr.schema - repls['predefinedMethods'] = self.flavourDescr.methods - # Manage custom fields - repls['fields'] = '' - repls['methods'] = '' - repls['wrapperClass'] = '%s_Wrapper' % self.flavourDescr.name - if self.customFlavourDescr: - repls['fields'] = self.customFlavourDescr.schema - repls['methods'] = self.customFlavourDescr.methods - wrapperClass = '%s_Wrapper' % self.customFlavourDescr.name - repls['wrapperClass'] = wrapperClass + repls['fields'] = self.flavour.schema + repls['methods'] = self.flavour.methods + repls['wrapperClass'] = '%s_Wrapper' % self.flavour.name repls['metaTypes'] = [c.name for c in self.classes] self.copyFile('FlavourTemplate.py', repls, destName='%s.py'% self.flavourName) # Generate the PodTemplate class - self.podTemplateDescr.generateSchema() + self.podTemplate.generateSchema() self.labels += [ Msg(self.podTemplateName, '', Msg.POD_TEMPLATE), Msg('%s_edit_descr' % self.podTemplateName, '', ' ')] repls = self.repls.copy() - repls['fields'] = self.podTemplateDescr.schema - repls['methods'] = self.podTemplateDescr.methods - repls['wrapperClass'] = '%s_Wrapper' % self.podTemplateDescr.name + repls['fields'] = self.podTemplate.schema + repls['methods'] = self.podTemplate.methods + repls['wrapperClass'] = '%s_Wrapper' % self.podTemplate.name self.copyFile('PodTemplate.py', repls, destName='%s.py' % self.podTemplateName) @@ -676,7 +662,7 @@ class Generator(AbstractGenerator): implements = [baseClass] for baseClass in classDescr.klass.__bases__: if self.determineAppyType(baseClass) == 'class': - bcName = ArchetypesClassDescriptor.getClassName(baseClass) + bcName = ClassDescriptor.getClassName(baseClass) parents.remove('ClassMixin') parents.append(bcName) implements.append(bcName) @@ -695,6 +681,7 @@ class Generator(AbstractGenerator): if classDescr.isAbstract(): register = '' repls = self.repls.copy() + classDescr.generateSchema() repls.update({ 'imports': '\n'.join(imports), 'parents': parents, 'className': classDescr.klass.__name__, diff --git a/gen/plone25/installer.py b/gen/plone25/installer.py index 1fa95b2..8606fd7 100644 --- a/gen/plone25/installer.py +++ b/gen/plone25/installer.py @@ -6,9 +6,15 @@ import os, os.path, time from StringIO import StringIO from sets import Set import appy +from appy.gen import Type, Ref from appy.gen.utils import produceNiceMessage from appy.gen.plone25.utils import updateRolesForPermission +class ZCTextIndexInfo: + '''Silly class used for storing information about a ZCTextIndex.''' + lexicon_id = "plone_lexicon" + index_type = 'Okapi BM25 Rank' + class PloneInstaller: '''This Plone installer runs every time the generated Plone product is installed or uninstalled (in the Plone configuration interface).''' @@ -45,6 +51,28 @@ class PloneInstaller: self.toolName = '%sTool' % self.productName self.toolInstanceName = 'portal_%s' % self.productName.lower() + @staticmethod + def updateIndexes(ploneSite, indexInfo, logger): + '''This method creates or updates, in a p_ploneSite, definitions of + indexes in its portal_catalog, based on index-related information + given in p_indexInfo. p_indexInfo is a dictionary of the form + {s_indexName:s_indexType}. Here are some examples of index types: + "FieldIndex", "ZCTextIndex", "DateIndex".''' + catalog = ploneSite.portal_catalog + indexNames = catalog.indexes() + for indexName, indexType in indexInfo.iteritems(): + if indexName not in indexNames: + # We need to create this index + if indexType != 'ZCTextIndex': + catalog.addIndex(indexName, indexType) + else: + catalog.addIndex(indexName,indexType,extra=ZCTextIndexInfo) + # Indexing database content based on this index. + catalog.reindexIndex(indexName, ploneSite.REQUEST) + logger.info('Created index "%s" of type "%s"...' % \ + (indexName, indexType)) + # TODO: if the index already exists but has not the same type, we + # re-create it with the same type and we reindex it. actionsToHide = { 'portal_actions': ('sitemap', 'accessibility', 'change_state','sendto'), @@ -235,18 +263,17 @@ class PloneInstaller: title=produceNiceMessage(templateName)) f.close() # Creates the new-way templates for Pod fields if they do not exist. - for contentType, attrNames in self.attributes.iteritems(): + for contentType, appyTypes in self.attributes.iteritems(): appyClass = self.tool.getAppyClass(contentType) if not appyClass: continue # May be an abstract class - for attrName in attrNames: - appyType = getattr(appyClass, attrName) + for appyType in appyTypes: if appyType.type == 'Pod': # For every flavour, find the attribute that stores the # template, and store on it the default one specified in # the appyType if no template is stored yet. for flavour in self.appyTool.flavours: attrName = flavour.getAttributeName( - 'podTemplate', appyClass, attrName) + 'podTemplate', appyClass, appyType.name) fileObject = getattr(flavour, attrName) if not fileObject or (fileObject.size == 0): # There is no file. Put the one specified in the @@ -298,9 +325,9 @@ class PloneInstaller: self.tool = getattr(self.ploneSite, self.toolInstanceName) self.appyTool = self.tool.appy() if self.reinstall: - self.tool.createOrUpdate(False) + self.tool.createOrUpdate(False, None) else: - self.tool.createOrUpdate(True) + self.tool.createOrUpdate(True, None) if not self.appyTool.flavours: # Create the default flavour @@ -324,9 +351,9 @@ class PloneInstaller: self.productName, None) def installRolesAndGroups(self): - '''Registers roles used by workflows defined in this application if - they are not registered yet. Creates the corresponding groups if - needed.''' + '''Registers roles used by workflows and classes defined in this + application if they are not registered yet. Creates the corresponding + groups if needed.''' site = self.ploneSite data = list(site.__ac_roles__) for role in self.applicationRoles: @@ -412,6 +439,22 @@ class PloneInstaller: if self.minimalistPlone: site.manage_changeProperties(right_slots=()) + def manageIndexes(self): + '''For every indexed field, this method installs and updates the + corresponding index if it does not exist yet.''' + indexInfo = {} + for className, appyTypes in self.attributes.iteritems(): + for appyType in appyTypes: + if appyType.indexed: + n = appyType.name + indexName = 'get%s%s' % (n[0].upper(), n[1:]) + indexType = 'FieldIndex' + if (appyType.type == 'String') and appyType.isSelect: + indexType = 'ZCTextIndex' + indexInfo[indexName] = indexType + if indexInfo: + PloneInstaller.updateIndexes(self.ploneSite, indexInfo, self) + def finalizeInstallation(self): '''Performs some final installation steps.''' site = self.ploneSite @@ -435,7 +478,8 @@ class PloneInstaller: frontPageName = self.productName + 'FrontPage' site.manage_changeProperties(default_page=frontPageName) - def log(self, msg): print >> self.toLog, msg + def log(self, msg): print msg + def info(self, msg): return self.log(msg) def install(self): self.log("Installation of %s:" % self.productName) @@ -447,9 +491,9 @@ class PloneInstaller: self.installWorkflows() self.installStyleSheet() self.managePortlets() + self.manageIndexes() self.finalizeInstallation() self.log("Installation of %s done." % self.productName) - return self.toLog.getvalue() def uninstallTool(self): site = self.ploneSite @@ -502,7 +546,7 @@ class ZopeInstaller: generated Zope product.''' def __init__(self, zopeContext, productName, toolClass, defaultAddContentPermission, addContentPermissions, - logger, ploneStuff): + logger, ploneStuff, classes): self.zopeContext = zopeContext self.productName = productName self.toolClass = toolClass @@ -510,6 +554,22 @@ class ZopeInstaller: self.addContentPermissions = addContentPermissions self.logger = logger self.ploneStuff = ploneStuff # A dict of some Plone functions or vars + self.classes = classes + + def completeAppyTypes(self): + '''We complete here the initialisation process of every Appy type of + every gen-class of the application.''' + for klass in self.classes: + for baseClass in klass.wrapperClass.__bases__: + for name, appyType in baseClass.__dict__.iteritems(): + if isinstance(appyType, Type): + appyType.init(name, baseClass, self.productName) + # Do not forget back references + if isinstance(appyType, Ref): + bAppyType = appyType.back + bAppyType.init(bAppyType.attribute, appyType.klass, + self.productName) + bAppyType.klass = baseClass def installApplication(self): '''Performs some application-wide installation steps.''' @@ -562,6 +622,7 @@ class ZopeInstaller: def install(self): self.logger.info('is being installed...') + self.completeAppyTypes() self.installApplication() self.installTool() self.installTypes() diff --git a/gen/plone25/mixins/ClassMixin.py b/gen/plone25/mixins/ClassMixin.py index 22190a7..fcd871f 100644 --- a/gen/plone25/mixins/ClassMixin.py +++ b/gen/plone25/mixins/ClassMixin.py @@ -3,40 +3,5 @@ from appy.gen.plone25.mixins import AbstractMixin # ------------------------------------------------------------------------------ class ClassMixin(AbstractMixin): - _appy_meta_type = 'class' - def _appy_fieldIsUsed(self, portalTypeName, fieldName): - tool = self.getTool() - flavour = tool.getFlavour(portalTypeName) - optionalFieldsAccessor = 'getOptionalFieldsFor%s' % self.meta_type - exec 'usedFields = flavour.%s()' % optionalFieldsAccessor - res = False - if fieldName in usedFields: - res = True - return res - - def _appy_getDefaultValueFor(self, portalTypeName, fieldName): - tool = self.getTool() - flavour = tool.getFlavour(portalTypeName) - fieldFound = False - klass = self.__class__ - while not fieldFound: - metaType = klass.meta_type - defValueAccessor = 'getDefaultValueFor%s_%s' % (metaType, fieldName) - if not hasattr(flavour, defValueAccessor): - # The field belongs to a super-class. - klass = klass.__bases__[-1] - else: - fieldFound = True - exec 'res = flavour.%s()' % defValueAccessor - return res - - def fieldIsUsed(self, fieldName): - '''Checks in the corresponding flavour if p_fieldName is used.''' - portalTypeName = self._appy_getPortalType(self.REQUEST) - return self._appy_fieldIsUsed(portalTypeName, fieldName) - - def getDefaultValueFor(self, fieldName): - '''Gets in the flavour the default value for p_fieldName.''' - portalTypeName = self._appy_getPortalType(self.REQUEST) - return self._appy_getDefaultValueFor(portalTypeName,fieldName) + _appy_meta_type = 'Class' # ------------------------------------------------------------------------------ diff --git a/gen/plone25/mixins/FlavourMixin.py b/gen/plone25/mixins/FlavourMixin.py index 52e1bfa..3118a31 100644 --- a/gen/plone25/mixins/FlavourMixin.py +++ b/gen/plone25/mixins/FlavourMixin.py @@ -8,7 +8,7 @@ from appy.pod.renderer import Renderer import appy.gen from appy.gen import Type from appy.gen.plone25.mixins import AbstractMixin -from appy.gen.plone25.descriptors import ArchetypesClassDescriptor +from appy.gen.plone25.descriptors import ClassDescriptor # Errors ----------------------------------------------------------------------- DELETE_TEMP_DOC_ERROR = 'A temporary document could not be removed. %s.' @@ -17,7 +17,7 @@ POD_ERROR = 'An error occurred while generating the document. Please ' \ # ------------------------------------------------------------------------------ class FlavourMixin(AbstractMixin): - _appy_meta_type = 'flavour' + _appy_meta_type = 'Flavour' def getPortalType(self, metaTypeOrAppyType): '''Returns the name of the portal_type that is based on p_metaTypeOrAppyType in this flavour.''' @@ -26,7 +26,7 @@ class FlavourMixin(AbstractMixin): isAppy = False appName = self.getProductConfig().PROJECTNAME if not isinstance(res, basestring): - res = ArchetypesClassDescriptor.getClassName(res) + res = ClassDescriptor.getClassName(res) isAppy = True if res.find('Extensions_appyWrappers') != -1: isPredefined = True @@ -41,8 +41,9 @@ class FlavourMixin(AbstractMixin): isPredefined = True res = '%sFlavour' % appName if not isPredefined: - if self.getNumber() != 1: - res = '%s_%d' % (res, self.number) + number = self.appy().number + if number != 1: + res = '%s_%d' % (res, number) return res def registerPortalTypes(self): @@ -129,9 +130,9 @@ class FlavourMixin(AbstractMixin): n = appyFlavour.getAttributeName('podTemplate', appyClass, fieldName) res['template'] = getattr(appyFlavour, n) appyType = ploneObj.getAppyType(fieldName) - res['title'] = self.translate(appyType['label']) - res['context'] = appyType['context'] - res['action'] = appyType['action'] + res['title'] = self.translate(appyType.labelId) + res['context'] = appyType.context + res['action'] = appyType.action return res def generateDocument(self): @@ -225,18 +226,18 @@ class FlavourMixin(AbstractMixin): appyTool.log(DELETE_TEMP_DOC_ERROR % str(ie), type='warning') return res - def getAttr(self, attrName): + def getAttr(self, name): '''Gets on this flavour attribute named p_attrName. Useful because we can't use getattr directly in Zope Page Templates.''' - return getattr(self, attrName, None) + return getattr(self.appy(), name, None) def _appy_getAllFields(self, contentType): '''Returns the (translated) names of fields of p_contentType.''' res = [] - for attrName in self.getProductConfig().attributes[contentType]: - if attrName != 'title': # Will be included by default. - label = '%s_%s' % (contentType, attrName) - res.append((attrName, self.translate(label))) + for appyType in self.getProductConfig().attributes[contentType]: + if appyType.name != 'title': # Will be included by default. + label = '%s_%s' % (contentType, appyType.name) + res.append((appyType.name, self.translate(label))) # Add object state res.append(('workflowState', self.translate('workflow_state'))) return res @@ -244,15 +245,10 @@ class FlavourMixin(AbstractMixin): def _appy_getSearchableFields(self, contentType): '''Returns the (translated) names of fields that may be searched on objects of type p_contentType (=indexed fields).''' - tool = self.getParentNode() - appyClass = tool.getAppyClass(contentType) - attrNames = self.getProductConfig().attributes[contentType] res = [] - for attrName in attrNames: - attr = getattr(appyClass, attrName) - if isinstance(attr, Type) and attr.indexed: - label = '%s_%s' % (contentType, attrName) - res.append((attrName, self.translate(label))) + for appyType in self.getProductConfig().attributes[contentType]: + if appyType.indexed: + res.append((appyType.name, self.translate(appyType.labelId))) return res def getSearchableFields(self, contentType): @@ -260,11 +256,10 @@ class FlavourMixin(AbstractMixin): the list of fields that the user has configured in the flavour as being effectively used in the search screen.''' res = [] - appyClass = self.getAppyClass(contentType) - for attrName in getattr(self, 'searchFieldsFor%s' % contentType, ()): - attr = getattr(appyClass, attrName) - dAttr = self._appy_getTypeAsDict(attrName, attr, appyClass) - res.append((attrName, dAttr)) + fieldNames = getattr(self.appy(), 'searchFieldsFor%s' % contentType, ()) + for name in fieldNames: + appyType = self.getAppyType(name, asDict=True,className=contentType) + res.append(appyType) return res def getImportElements(self, contentType): diff --git a/gen/plone25/mixins/PodTemplateMixin.py b/gen/plone25/mixins/PodTemplateMixin.py index 94de19e..abf2b51 100644 --- a/gen/plone25/mixins/PodTemplateMixin.py +++ b/gen/plone25/mixins/PodTemplateMixin.py @@ -3,5 +3,5 @@ from appy.gen.plone25.mixins import AbstractMixin # ------------------------------------------------------------------------------ class PodTemplateMixin(AbstractMixin): - _appy_meta_type = 'podtemplate' + _appy_meta_type = 'PodTemplate' # ------------------------------------------------------------------------------ diff --git a/gen/plone25/mixins/ToolMixin.py b/gen/plone25/mixins/ToolMixin.py index 8562456..67581a2 100644 --- a/gen/plone25/mixins/ToolMixin.py +++ b/gen/plone25/mixins/ToolMixin.py @@ -1,40 +1,18 @@ # ------------------------------------------------------------------------------ import re, os, os.path, Cookie +from appy.shared.utils import getOsTempFolder from appy.gen import Type, Search, Selection -from appy.gen.utils import FieldDescr, SomeObjects, sequenceTypes +from appy.gen.utils import SomeObjects, sequenceTypes from appy.gen.plone25.mixins import AbstractMixin from appy.gen.plone25.mixins.FlavourMixin import FlavourMixin from appy.gen.plone25.wrappers import AbstractWrapper -from appy.gen.plone25.descriptors import ArchetypesClassDescriptor +from appy.gen.plone25.descriptors import ClassDescriptor -_PY = 'Please specify a file corresponding to a Python interpreter ' \ - '(ie "/usr/bin/python").' -FILE_NOT_FOUND = 'Path "%s" was not found.' -VALUE_NOT_FILE = 'Path "%s" is not a file. ' + _PY -NO_PYTHON = "Name '%s' does not starts with 'python'. " + _PY -NOT_UNO_ENABLED_PYTHON = '"%s" is not a UNO-enabled Python interpreter. ' \ - 'To check if a Python interpreter is UNO-enabled, ' \ - 'launch it and type "import uno". If you have no ' \ - 'ImportError exception it is ok.' jsMessages = ('no_elem_selected', 'delete_confirm') # ------------------------------------------------------------------------------ class ToolMixin(AbstractMixin): - _appy_meta_type = 'tool' - def _appy_validateUnoEnabledPython(self, value): - '''This method represents the validator for field unoEnabledPython. - This field is present on the Tool only if POD is needed.''' - if value: - if not os.path.exists(value): - return FILE_NOT_FOUND % value - if not os.path.isfile(value): - return VALUE_NOT_FILE % value - if not os.path.basename(value).startswith('python'): - return NO_PYTHON % value - if os.system('%s -c "import uno"' % value): - return NOT_UNO_ENABLED_PYTHON % value - return None - + _appy_meta_type = 'Tool' def getFlavour(self, contextObjOrPortalType, appy=False): '''Gets the flavour that corresponds to p_contextObjOrPortalType.''' if isinstance(contextObjOrPortalType, basestring): @@ -102,8 +80,11 @@ class ToolMixin(AbstractMixin): def getObject(self, uid, appy=False): '''Allows to retrieve an object from its p_uid.''' res = self.uid_catalog(UID=uid) - if res: return res[0].getObject() - return None + if res: + res = res[0].getObject() + if appy: + res = res.appy() + return res def executeQuery(self, contentType, flavourNumber=1, searchName=None, startNumber=0, search=None, remember=False, @@ -133,7 +114,7 @@ class ToolMixin(AbstractMixin): useful for some usages like knowing the number of objects without needing to get information about them). If no p_maxResults is specified, the method returns maximum - self.getNumberOfResultsPerPage(). The method returns all objects if + self.numberOfResultsPerPage. The method returns all objects if p_maxResults equals string "NO_LIMIT". If p_noSecurity is True, it gets all the objects, even those that the @@ -163,7 +144,7 @@ class ToolMixin(AbstractMixin): # In this case, contentType must contain a single content type. appyClass = self.getAppyClass(contentType) if searchName != '_advanced': - search = ArchetypesClassDescriptor.getSearch( + search = ClassDescriptor.getSearch( appyClass, searchName) else: fields = self.REQUEST.SESSION['searchCriteria'] @@ -201,7 +182,7 @@ class ToolMixin(AbstractMixin): # Return brains only. if not maxResults: return brains else: return brains[:maxResults] - if not maxResults: maxResults = self.getNumberOfResultsPerPage() + if not maxResults: maxResults = self.appy().numberOfResultsPerPage elif maxResults == 'NO_LIMIT': maxResults = None res = SomeObjects(brains, maxResults, startNumber,noSecurity=noSecurity) res.brainsToObjects() @@ -249,26 +230,31 @@ class ToolMixin(AbstractMixin): def getResultColumns(self, anObject, contentType): '''What columns must I show when displaying a list of root class instances? Result is a list of tuples containing the name of the - column (=name of the field) and a FieldDescr instance.''' + column (=name of the field) and the corresponding appyType (dict + version).''' res = [] for fieldName in self.getResultColumnsNames(contentType): if fieldName == 'workflowState': - # We do not return a FieldDescr instance if the attributes is - # not a *real* attribute but the workfow state. + # We do not return a appyType if the attribute is not a *real* + # attribute, but the workfow state. res.append(fieldName) else: - # Create a FieldDescr instance - appyType = anObject.getAppyType(fieldName) + appyType = anObject.getAppyType(fieldName, asDict=True) if not appyType: - res.append({'atField': None, 'name': fieldName}) + res.append({'name': fieldName, '_wrong': True}) # The field name is wrong. # We return it so we can show it in an error message. else: - atField = anObject.schema.get(fieldName) - fieldDescr = FieldDescr(atField, appyType, None) - res.append(fieldDescr.get()) + res.append(appyType) return res + def truncateValue(self, value, appyType): + '''Truncates the p_value according to p_appyType width.''' + maxWidth = appyType['width'] + if len(value) > maxWidth: + return value[:maxWidth] + '...' + return value + xhtmlToText = re.compile('<.*?>', re.S) def getReferenceLabel(self, brain, appyType): '''p_appyType is a Ref with link=True. I need to display, on an edit @@ -288,8 +274,8 @@ class ToolMixin(AbstractMixin): elif isinstance(value, basestring): value = value.decode('utf-8') refAppyType = appyObj.o.getAppyType(fieldName) - if refAppyType and (refAppyType['type'] == 'String') and \ - (refAppyType['format'] == 2): + if refAppyType and (refAppyType.type == 'String') and \ + (refAppyType.format == 2): value = self.xhtmlToText.sub(' ', value) else: value = str(value) @@ -312,13 +298,21 @@ class ToolMixin(AbstractMixin): appName = self.getProductConfig().PROJECTNAME return self.utranslate(label, self.translationMapping, domain=appName) - def getPublishedObject(self): - '''Gets the currently published object.''' + def getPublishedObject(self, rootClasses): + '''Gets the currently published object, if its meta_class is among + p_rootClasses or if it is the corresponding tool or flavour.''' rq = self.REQUEST obj = rq['PUBLISHED'] parent = obj.getParentNode() - if parent.id == 'skyn': return parent.getParentNode() - return rq['PUBLISHED'] + if parent.id == 'skyn': + obj = parent.getParentNode() + if obj.meta_type in rootClasses: + return obj + else: + appName = self.getAppName() + if obj.meta_type in ('%sTool' % appName, '%sFlavour' % appName): + return obj + return None def getAppyClass(self, contentType): '''Gets the Appy Python class that is related to p_contentType.''' @@ -359,6 +353,17 @@ class ToolMixin(AbstractMixin): res[means.id] = means.__dict__ return res + def userMayAdd(self, rootClass): + '''For deciding if a user may add a new instance of a class, beyond the + permission-based check, we can have a custom method that proposes an + additional condition. This method checks if there is such a custom + method (must be named "mayCreate") define on p_rootClass, and calls + it if yes. If no, it returns True.''' + pythonClass = self.getAppyClass(rootClass) + if 'mayCreate' in pythonClass.__dict__: + return pythonClass.mayCreate(self.appy()) + return True + def onImportObjects(self): '''This method is called when the user wants to create objects from external data.''' @@ -503,7 +508,7 @@ class ToolMixin(AbstractMixin): appyClass = self.getAppyClass(contentType) res = [] visitedGroups = {} # Names of already visited search groups - for search in ArchetypesClassDescriptor.getSearches(appyClass): + for search in ClassDescriptor.getSearches(appyClass): # Determine first group label, we will need it. groupLabel = '' if search.group: @@ -610,7 +615,7 @@ class ToolMixin(AbstractMixin): if t == 'ref': # Manage navigation from a reference fieldName = d2 masterObj = self.getObject(d1) - batchSize = masterObj.getAppyType(fieldName)['maxPerPage'] + batchSize = masterObj.getAppyType(fieldName).maxPerPage uids = getattr(masterObj, '_appy_%s' % fieldName) # In the case of a reference, we retrieve ALL surrounding objects. @@ -679,21 +684,18 @@ class ToolMixin(AbstractMixin): into a list of lists, where every sub-list has length p_numberOfRows. This method is typically used for rendering elements in a table of p_numberOfRows rows.''' - if numberOfRows > 1: - res = [] - row = [] - for elem in data: - row.append(elem) - if len(row) == numberOfRows: - res.append(row) - row = [] - # Complete the last unfinished line if required. - if row: - while len(row) < numberOfRows: row.append(None) + res = [] + row = [] + for elem in data: + row.append(elem) + if len(row) == numberOfRows: res.append(row) - return res - else: - return data + row = [] + # Complete the last unfinished line if required. + if row: + while len(row) < numberOfRows: row.append(None) + res.append(row) + return res def truncate(self, value, numberOfChars): '''Truncates string p_value to p_numberOfChars.''' @@ -708,22 +710,6 @@ class ToolMixin(AbstractMixin): '''Gets the translated month name of month numbered p_monthNumber.''' return self.translate(self.monthsIds[int(monthNumber)], domain='plone') - def getSelectValues(self, appyType): - '''Return the possible values (with their translation) of String type - p_appyType (dict version) which is a string whose validator limits - the possible values, either statically (validator is simply a list - of values) or dynamically (validator is a Selection instance).''' - validator = appyType['validator'] - if isinstance(validator, Selection): - vocab = self._appy_getDynamicDisplayList(validator.methodName) - return vocab.items() - else: - res = [] - for v in validator: - text = self.translate('%s_list_%s' % (appyType['label'], v)) - res.append((v, self.truncate(text, 30))) - return res - def logout(self): '''Logs out the current user when he clicks on "disconnect".''' rq = self.REQUEST @@ -748,4 +734,20 @@ class ToolMixin(AbstractMixin): from appy.gen.plone25.installer import loggedUsers if loggedUsers.has_key(userId): del loggedUsers[userId] return self.goto(self.getParentNode().absolute_url()) + + def tempFile(self): + '''A temp file has been created in a temp folder. This method returns + this file to the browser.''' + rq = self.REQUEST + baseFolder = os.path.join(getOsTempFolder(), self.getAppName()) + baseFolder = os.path.join(baseFolder, rq.SESSION.id) + fileName = os.path.join(baseFolder, rq.get('name', '')) + if os.path.exists(fileName): + f = file(fileName) + content = f.read() + f.close() + # Remove the temp file + os.remove(fileName) + return content + return 'File does not exist' # ------------------------------------------------------------------------------ diff --git a/gen/plone25/mixins/__init__.py b/gen/plone25/mixins/__init__.py index 7829084..e622093 100644 --- a/gen/plone25/mixins/__init__.py +++ b/gen/plone25/mixins/__init__.py @@ -6,14 +6,13 @@ The AbstractMixin defined hereafter is the base class of any mixin.''' # ------------------------------------------------------------------------------ -import os, os.path, sys, types, mimetypes -from appy.shared.utils import Traceback +import os, os.path, types, mimetypes import appy.gen -from appy.gen import String, Selection -from appy.gen.utils import FieldDescr, GroupDescr, PhaseDescr, StateDescr, \ - ValidationErrors, sequenceTypes, SomeObjects -from appy.gen.plone25.descriptors import ArchetypesClassDescriptor -from appy.gen.plone25.utils import updateRolesForPermission, getAppyRequest +from appy.gen import Type, String, Selection +from appy.gen.utils import * +from appy.gen.layout import Table, defaultPageLayouts +from appy.gen.plone25.descriptors import ClassDescriptor +from appy.gen.plone25.utils import updateRolesForPermission # ------------------------------------------------------------------------------ class AbstractMixin: @@ -21,12 +20,13 @@ class AbstractMixin: inherits from this class. It contains basic functions allowing to minimize the amount of generated code.''' - def createOrUpdate(self, created): + def createOrUpdate(self, created, values): '''This method creates (if p_created is True) or updates an object. - In the case of an object creation, p_self is a temporary object - created in the request by portal_factory, and this method creates - the corresponding final object. In the case of an update, this - method simply updates fields of p_self.''' + p_values are manipulated versions of those from the HTTP request. + In the case of an object creation (p_created is True), p_self is a + temporary object created in the request by portal_factory, and this + method creates the corresponding final object. In the case of an + update, this method simply updates fields of p_self.''' rq = self.REQUEST obj = self if created: @@ -35,12 +35,18 @@ class AbstractMixin: previousData = None if not created: previousData = self.rememberPreviousData() # Perform the change on the object, unless self is a tool being created. - if (obj._appy_meta_type == 'tool') and created: + if (obj._appy_meta_type == 'Tool') and created: # We do not process form data (=real update on the object) if the # tool itself is being created. pass else: - obj.processForm() + # Store in the database the new value coming from the form + for appyType in self.getAppyTypes('edit', rq.get('page')): + value = getattr(values, appyType.name, None) + appyType.store(obj, value) + if created: + # Now we have a title for the object, so we derive a nice id + obj._renameAfterCreation(check_auto_id=True) if previousData: # Keep in history potential changes on historized fields self.historizeData(previousData) @@ -49,12 +55,10 @@ class AbstractMixin: obj._appy_manageRefs(created) if obj.wrapperClass: # Get the wrapper first - appyWrapper = obj.appy() + appyObject = obj.appy() # Call the custom "onEdit" if available - try: - appyWrapper.onEdit(created) - except AttributeError, ae: - pass + if hasattr(appyObject, 'onEdit'): + appyObject.onEdit(created) # Manage "add" permissions obj._appy_managePermissions() # Reindex object @@ -72,11 +76,10 @@ class AbstractMixin: if rq.get('initiator', None): # The object to create will be linked to an initiator object through # a ref field. - initiatorRes=self.uid_catalog.searchResults(UID=rq.get('initiator')) rq.SESSION['initiator'] = rq.get('initiator') rq.SESSION['initiatorField'] = rq.get('field') rq.SESSION['initiatorTarget'] = rq.get('type_name') - if self._appy_meta_type == 'tool': + if self._appy_meta_type == 'Tool': if rq.get('initiator', None): # This is the creation of an object linked to the tool baseUrl = self.absolute_url() @@ -90,6 +93,43 @@ class AbstractMixin: (baseUrl, rq.get('type_name'), objId) return self.goto(urlBack) + def intraFieldValidation(self, errors, values): + '''This method performs field-specific validation for every field from + the page that is being created or edited. For every field whose + validation generates an error, we add an entry in p_errors. For every + field, we add in p_values an entry with the "ready-to-store" field + value.''' + rq = self.REQUEST + for appyType in self.getAppyTypes('edit', rq.form.get('page')): + if not appyType.validable: continue + value = appyType.getRequestValue(rq) + message = appyType.validate(self, value) + if message: + setattr(errors, appyType.name, message) + else: + setattr(values, appyType.name, appyType.getStorableValue(value)) + + def interFieldValidation(self, errors, values): + '''This method is called when individual validation of all fields + succeed (when editing or creating an object). Then, this method + performs inter-field validation. This way, the user must first + correct individual fields before being confronted to potential + inter-field validation errors.''' + obj = self.appy() + if not hasattr(obj, 'validate'): return + obj.validate(values, errors) + # This custom "validate" method may have added fields in the given + # p_errors object. Within this object, for every error message that is + # not a string, we replace it with the standard validation error for the + # corresponding field. + for key, value in errors.__dict__.iteritems(): + resValue = value + if not isinstance(resValue, basestring): + appyType = self.getAppyType(key) + msgId = '%s_valid' % appyType.labelId + resValue = self.translate(msgId) + setattr(errors, key, resValue) + def onUpdate(self): '''This method is executed when a user wants to update an object. The object may be a temporary object created by portal_factory in @@ -97,53 +137,76 @@ class AbstractMixin: the "final" object in the database. If the object is not a temporary one, this method updates its fields in the database.''' rq = self.REQUEST - # Dict for storing validation errors - errors = {} errorMessage = self.translate( 'Please correct the indicated errors.', domain='plone') + isNew = rq.get('is_new') == 'True' # Go back to the consult view if the user clicked on 'Cancel' - if rq.get('buttonCancel', None): - if '/portal_factory/' in self.absolute_url(): + if rq.get('buttonCancel.x', None): + if isNew: # Go back to the Plone site (no better solution at present). urlBack = self.portal_url.getPortalObject().absolute_url() else: - urlBack = '%s/skyn/view' % self.absolute_url() + urlBack = self.absolute_url() self.plone_utils.addPortalMessage( self.translate('Changes canceled.', domain='plone')) return self.goto(urlBack, True) + # Object for storing validation errors + errors = AppyObject() + # Object for storing the (converted) values from the request + values = AppyObject() + # Trigger field-specific validation - self.validate(REQUEST=rq, errors=errors, data=1, metadata=0) - if errors: - rq.set('errors', errors) + self.intraFieldValidation(errors, values) + if errors.__dict__: + rq.set('errors', errors.__dict__) self.plone_utils.addPortalMessage(errorMessage) return self.skyn.edit(self) - else: - # Trigger inter-field validation - self.validateAllFields(rq, errors) - if errors: - rq.set('errors', errors) - self.plone_utils.addPortalMessage(errorMessage) - return self.skyn.edit(self) + + # Trigger inter-field validation + self.interFieldValidation(errors, values) + if errors.__dict__: + rq.set('errors', errors.__dict__) + self.plone_utils.addPortalMessage(errorMessage) + return self.skyn.edit(self) + + # Create or update the object in the database + obj = self.createOrUpdate(isNew, values) + + # Redirect the user to the appropriate page + msg = obj.translate('Changes saved.', domain='plone') + if rq.get('buttonOk.x', None): + # Go to the consult view for this object + obj.plone_utils.addPortalMessage(msg) + return self.goto('%s/skyn/view' % obj.absolute_url(), True) + if rq.get('buttonPrevious.x', None): + # Go to the previous page (edit mode) for this object. + # We recompute the list of phases and pages because things + # may have changed since the object has been updated (ie, + # additional pages may be shown or hidden now, so the next and + # previous pages may have changed). + currentPage = rq.get('page') + phaseInfo = self.getAppyPhases(page=currentPage) + previousPage = self.getPreviousPage(phaseInfo, currentPage) + if previousPage: + rq.set('page', previousPage) + return obj.skyn.edit(obj) else: - # Create or update the object in the database - obj = self.createOrUpdate(rq.get('is_new') == 'True') - # Redirect the user to the appropriate page - if rq.get('buttonOk', None): - # Go to the consult view for this object - obj.plone_utils.addPortalMessage( - obj.translate('Changes saved.', domain='plone')) - urlBack = '%s/skyn/view' % obj.absolute_url() - return self.goto(urlBack, True) - elif rq.get('buttonPrevious', None): - # Go to the edit view (previous page) for this object - rq.set('fieldset', rq.get('previousPage')) - return obj.skyn.edit(obj) - elif rq.get('buttonNext', None): - # Go to the edit view (next page) for this object - rq.set('fieldset', rq.get('nextPage')) - return obj.skyn.edit(obj) + obj.plone_utils.addPortalMessage(msg) + return self.goto('%s/skyn/view' % obj.absolute_url(), True) + if rq.get('buttonNext.x', None): + # Go to the next page (edit mode) for this object + currentPage = rq.get('page') + phaseInfo = self.getAppyPhases(page=currentPage) + nextPage = self.getNextPage(phaseInfo, currentPage) + if nextPage: + rq.set('page', nextPage) + return obj.skyn.edit(obj) + else: + obj.plone_utils.addPortalMessage(msg) + return self.goto('%s/skyn/view' % obj.absolute_url(), True) + return obj.skyn.edit(obj) def onDelete(self): rq = self.REQUEST @@ -157,12 +220,10 @@ class AbstractMixin: every historized field, the previous value. Result is a dict ~{s_fieldName: previousFieldValue}~''' res = {} - for atField in self.Schema().filterFields(isMetadata=0): - fieldName = atField.getName() - appyType = self.getAppyType(fieldName, asDict=False) - if appyType and appyType.historized: - res[fieldName] = (getattr(self, fieldName), - atField.widget.label_msgid) + for appyType in self.getAllAppyTypes(): + if appyType.historized: + res[appyType.name] = (getattr(self, appyType.name), + appyType.labelId) return res def addDataChange(self, changes, labels=False): @@ -175,7 +236,7 @@ class AbstractMixin: if not labels: for fieldName in changes.iterkeys(): appyType = self.getAppyType(fieldName) - changes[fieldName] = (changes[fieldName], appyType['label']) + changes[fieldName] = (changes[fieldName], appyType.labelId) # Create the event to record in the history DateTime = self.getProductConfig().DateTime state = self.portal_workflow.getInfoFor(self, 'review_state') @@ -208,20 +269,26 @@ class AbstractMixin: if not addParams: return rq.RESPONSE.redirect(url) # Add some context-related parameters if needed. params = [] - if rq.get('phase', ''): params.append('phase=%s' % rq['phase']) - if rq.get('pageName', ''): params.append('pageName=%s' % rq['pageName']) - if rq.get('nav', ''): params.append('nav=%s' % rq['nav']) + if rq.get('page', ''): params.append('page=%s' % rq['page']) + if rq.get('nav', ''): params.append('nav=%s' % rq['nav']) params = '&'.join(params) if not params: return rq.RESPONSE.redirect(url) if url.find('?') != -1: params = '&' + params else: params = '?' + params return rq.RESPONSE.redirect(url+params) - def getAppyValue(self, name, appyType=None, useParamValue=False, - value=None, forMasterId=False): - '''Returns the value of field (or method) p_name for this object - (p_self). If p_appyType (the corresponding Appy type) is provided, - it gives additional information about the way to render the value. + def showField(self, name, layoutType='view'): + '''Must I show field named p_name on this p_layoutType ?''' + return self.getAppyType(name).isShowable(self, layoutType) + + def getMethod(self, methodName): + '''Returns the method named p_methodName.''' + return getattr(self, methodName, None) + + def getFormattedValue(self, name, useParamValue=False, value=None, + forMasterId=False): + '''Returns the value of field named p_name for this object (p_self). + If p_useParamValue is True, the method uses p_value instead of the real field value (useful for rendering a value from the object history, for example). @@ -229,96 +296,14 @@ class AbstractMixin: If p_forMasterId is True, it returns the value as will be needed to produce an identifier used within HTML pages for master/slave relationships.''' + appyType = self.getAppyType(name) # Which value will we use ? - if useParamValue: v = value - else: - try: - v = eval('self.%s' % name) - except AttributeError: - # Probably a newly created attribute. - # In this case, return the default value. - v = None - if appyType: v = appyType['default'] - if not appyType: return v - if (v == None) or (v == ''): return v - vType = appyType['type'] - if vType == 'Date': - res = v.strftime('%d/%m/') + str(v.year()) - if appyType['format'] == 0: - res += ' %s' % v.strftime('%H:%M') - return res - elif vType == 'String': - if not v or forMasterId: return v - if appyType['isSelect']: - validator = appyType['validator'] - if isinstance(validator, Selection): - # Value(s) come from a dynamic vocabulary - return validator.getText(self, v) - else: - # Value(s) come from a fixed vocabulary whose texts are in - # i18n files. - maxMult = appyType['multiplicity'][1] - t = self.translate - if (maxMult == None) or (maxMult > 1): - return [t('%s_%s_list_%s' % (self.meta_type, name, e)) \ - for e in v] - else: - return t('%s_%s_list_%s' % (self.meta_type, name, v)) - if not isinstance(v, basestring): - # Archetypes "Description" fields may hold a BaseUnit instance. - try: - v = unicode(v) - except UnicodeDecodeError: - v = str(v) - return v - elif vType == 'Boolean': - if v: return self.translate('yes', domain='plone') - else: return self.translate('no', domain='plone') - elif vType == 'Float': - if appyType['precision'] == None: - v = str(v) - else: - format = '%%.%df' % appyType['precision'] - v = format % v - return v - - def getAppyType(self, fieldName, forward=True, asDict=True): - '''Returns the Appy type corresponding to p_fieldName. If you want to - get the Appy type corresponding to a backward field, set p_forward - to False and specify the corresponding Archetypes relationship in - p_fieldName.''' - res = None - if forward: - if fieldName == 'id': return res - if self.wrapperClass: - baseClass = self.wrapperClass.__bases__[-1] - try: - # If I get the attr on self instead of baseClass, I get the - # property field that is redefined at the wrapper level. - res = appyType = getattr(baseClass, fieldName) - if asDict: - res = self._appy_getTypeAsDict( - fieldName, appyType, baseClass) - except AttributeError: - # Check for another parent - if self.wrapperClass.__bases__[0].__bases__: - baseClass = self.wrapperClass.__bases__[0].__bases__[-1] - try: - res = appyType = getattr(baseClass, fieldName) - if asDict: - res = self._appy_getTypeAsDict( - fieldName, appyType, baseClass) - except AttributeError: - pass - else: - referers = self.getProductConfig().referers - for appyType, rel in referers[self.__class__.__name__]: - if rel == fieldName: - res = appyType - if asDict: - res = appyType.__dict__ - res['backd'] = appyType.back.__dict__ - return res + if not useParamValue: + value = appyType.getValue(self) + # Return the value as is if it is None or forMasterId + if forMasterId: return value + # Return the formatted value else + return appyType.getFormattedValue(self, value) def _appy_getRefs(self, fieldName, ploneObjects=False, noListIfSingleObj=False, startNumber=None): @@ -346,7 +331,7 @@ class AbstractMixin: res = SomeObjects() res.totalNumber = res.batchSize = len(sortedUids) if batchNeeded: - res.batchSize = appyType['maxPerPage'] + res.batchSize = appyType.maxPerPage if startNumber != None: res.startNumber = startNumber # Get the needed referred objects @@ -362,23 +347,21 @@ class AbstractMixin: res.objects.append(refObject) i += 1 if res.objects and noListIfSingleObj: - if appyType['multiplicity'][1] == 1: + if appyType.multiplicity[1] == 1: res.objects = res.objects[0] return res - def getAppyRefs(self, fieldName, forward=True, startNumber=None): - '''Gets the objects linked to me through p_fieldName. If you need to - get a backward reference, set p_forward to False and specify the - corresponding Archetypes relationship in p_fieldName. + def getAppyRefs(self, appyType, startNumber=None): + '''Gets the objects linked to me through Ref p_appyType. If p_startNumber is None, this method returns all referred objects. If p_startNumber is a number, this method will return x objects, starting at p_startNumber, x being appyType.maxPerPage.''' - if forward: - return self._appy_getRefs(fieldName, ploneObjects=True, + if not appyType['isBack']: + return self._appy_getRefs(appyType['name'], ploneObjects=True, startNumber=startNumber).__dict__ else: - # Note Pagination is not yet implemented for backward ref. - return SomeObjects(self.getBRefs(fieldName)).__dict__ + # Note Pagination is not yet implemented for backward refs. + return SomeObjects(self.getBRefs(appyType['relationship'])).__dict__ def getAppyRefIndex(self, fieldName, obj): '''Gets the position of p_obj within Ref field named p_fieldName.''' @@ -386,132 +369,81 @@ class AbstractMixin: res = sortedObjectsUids.index(obj.UID()) return res - def getAppyBackRefs(self): - '''Returns the list of back references (=types, not objects) that are - defined for this class.''' - className = self.__class__.__name__ - referers = self.getProductConfig().referers - res = [] - if referers.has_key(className): - for appyType, relationship in referers[className]: - d = appyType.__dict__ - d['backd'] = appyType.back.__dict__ - res.append((d, relationship)) - return res - def getAppyRefPortalType(self, fieldName): '''Gets the portal type of objects linked to me through Ref field named p_fieldName.''' appyType = self.getAppyType(fieldName) tool = self.getTool() - if self._appy_meta_type == 'flavour': + if self._appy_meta_type == 'Flavour': flavour = self.appy() else: portalTypeName = self._appy_getPortalType(self.REQUEST) flavour = tool.getFlavour(portalTypeName) - return self._appy_getAtType(appyType['klass'], flavour) + return self._appy_getAtType(appyType.klass, flavour) - def _appy_getOrderedFields(self, isEdit): - '''Gets all fields (normal fields, back references, fields to show, - fields to hide) in order, in the form of a list of FieldDescr - instances.''' - orderedFields = [] - # Browse Archetypes fields - for atField in self.Schema().filterFields(isMetadata=0): - fieldName = atField.getName() - appyType = self.getAppyType(fieldName) - if not appyType: - if isEdit and (fieldName == 'title'): - # We must provide a dummy appy type for it. Else, it will - # not be rendered in the "edit" form. - appyType = String(multiplicity=(1,1)).__dict__ - else: - continue # Special fields like 'id' are not relevant - # Do not display title on view page; it is already in the header - if not isEdit and (fieldName=='title'): pass - else: - orderedFields.append(FieldDescr(atField, appyType, None)) - # Browse back references - for appyType, fieldRel in self.getAppyBackRefs(): - orderedFields.append(FieldDescr(None, appyType, fieldRel)) - # If some fields must be moved, do it now - res = [] - for fieldDescr in orderedFields: - if fieldDescr.appyType['move']: - newPosition = len(res) - abs(fieldDescr.appyType['move']) - if newPosition <= 0: - newPosition = 0 - res.insert(newPosition, fieldDescr) - else: - res.append(fieldDescr) - return res + def getAppyType(self, name, asDict=False, className=None): + '''Returns the Appy type named p_name. If no p_className is defined, the + field is supposed to belong to self's class.''' + className = className or self.__class__.__name__ + attrs = self.getProductConfig().attributesDict[className] + appyType = attrs.get(name, None) + if appyType and asDict: return appyType.__dict__ + return appyType - def showField(self, fieldDescr, isEdit=False): - '''Must I show field corresponding to p_fieldDescr?''' - if isinstance(fieldDescr, FieldDescr): - fieldDescr = fieldDescr.__dict__ - appyType = fieldDescr['appyType'] - if isEdit and (appyType['type']=='Ref') and appyType['add']:return False - if isEdit and (appyType['type'] == 'Action'): return False - if (fieldDescr['widgetType'] == 'backField') and \ - not self.getBRefs(fieldDescr['fieldRel']): return False - # Do not show field if it is optional and not selected in flavour - if appyType['optional']: - tool = self.getTool() - flavour = tool.getFlavour(self, appy=True) - flavourAttrName = 'optionalFieldsFor%s' % self.meta_type - flavourAttrValue = getattr(flavour, flavourAttrName, ()) - if fieldDescr['atField'].getName() not in flavourAttrValue: - return False - # Check if the user has the permission to view or edit the field - if fieldDescr['widgetType'] != 'backField': - user = self.portal_membership.getAuthenticatedMember() - if isEdit: - perm = fieldDescr['atField'].write_permission - else: - perm = fieldDescr['atField'].read_permission - if not user.has_permission(perm, self): - return False - # Evaluate fieldDescr['show'] - if callable(fieldDescr['show']): - res = fieldDescr['show'](self.appy()) - else: - res = fieldDescr['show'] - # Take into account possible values 'view' and 'edit' for 'show' param. - if (res == 'view' and isEdit) or (res == 'edit' and not isEdit): - res = False - return res + def getAllAppyTypes(self, className=None): + '''Returns the ordered list of all Appy types for self's class if + p_className is not specified, or for p_className else.''' + className = className or self.__class__.__name__ + return self.getProductConfig().attributes[className] - def getAppyFields(self, isEdit, page): - '''Returns the fields sorted by group. For every field, a dict - containing the relevant info needed by the view or edit templates is - given.''' + def getGroupedAppyTypes(self, layoutType, page): + '''Returns the fields sorted by group. For every field, the appyType + (dict version) is given.''' res = [] groups = {} # The already encountered groups - for fieldDescr in self._appy_getOrderedFields(isEdit): - # Select only widgets shown on current page - if fieldDescr.page != page: continue - # Do not take into account hidden fields and fields that can't be - # edited through the edit view - if not self.showField(fieldDescr, isEdit): continue - if not fieldDescr.group: - res.append(fieldDescr.get()) + for appyType in self.getAllAppyTypes(): + if appyType.page != page: continue + if not appyType.isShowable(self, layoutType): continue + if not appyType.group: + res.append(appyType.__dict__) else: - # Have I already met this group? - groupName, cols = GroupDescr.getGroupInfo(fieldDescr.group) - if not groups.has_key(groupName): - groupDescr = GroupDescr(groupName, cols, - fieldDescr.appyType['page']).get() - groups[groupName] = groupDescr - res.append(groupDescr) - else: - groupDescr = groups[groupName] - groupDescr['fields'].append(fieldDescr.get()) - if groups: - for groupDict in groups.itervalues(): - GroupDescr.computeRows(groupDict) + # Insert the GroupDescr instance corresponding to + # appyType.group at the right place + groupDescr = appyType.group.insertInto(res, groups, + appyType.page, self.meta_type) + GroupDescr.addWidget(groupDescr, appyType.__dict__) return res + def getAppyTypes(self, layoutType, page): + '''Returns the list of appyTypes that belong to a given p_page, for a + given p_layoutType.''' + res = [] + for appyType in self.getAllAppyTypes(): + if appyType.page != page: continue + if not appyType.isShowable(self, layoutType): continue + res.append(appyType) + return res + + def getCssAndJs(self, layoutType, page): + '''Returns the CSS and Javascript files that need to be loaded by the + p_page for the given p_layoutType.''' + css = [] + js = [] + for appyType in self.getAppyTypes(layoutType, page): + typeCss = appyType.getCss(layoutType) + if typeCss: + for tcss in typeCss: + if tcss not in css: css.append(tcss) + typeJs = appyType.getJs(layoutType) + if typeJs: + for tjs in typeJs: + if tjs not in js: js.append(tjs) + return css, js + + def getAppyTypesFromNames(self, fieldNames, asDict=True): + '''Gets the appy types names p_fieldNames.''' + return [self.getAppyType(name, asDict) for name in fieldNames] + def getAppyStates(self, phase, currentOnly=False): '''Returns information about the states that are related to p_phase. If p_currentOnly is True, we return the current state, even if not @@ -552,73 +484,23 @@ class AbstractMixin: res.append(transition) return res - def getAppyPage(self, isEdit, phaseInfo, appyPages, appyName=True): - '''On which page am I? p_isEdit indicates if the current page is an - edit or consult view. p_phaseInfo indicates the current phase. - p_appyPages is the list of displayable appy pages.''' - pageAttr = 'pageName' - if isEdit: - pageAttr = 'fieldset' # Archetypes page name - default = phaseInfo['pages'][0] - # Default page is the first page of the current phase - res = self.REQUEST.get(pageAttr, default) - if appyName and (res == 'default'): - res = 'main' - # If the page is not among currently displayable pages, return the - # default page - if res not in appyPages: - res = 'main' - if not appyName: res = 'default' - return res - - def getAppyPages(self, phase='main'): - '''Gets the list of pages that are defined for this content type.''' - res = [] - for atField in self.Schema().filterFields(isMetadata=0): - appyType = self.getAppyType(atField.getName()) - if not appyType: continue - if (appyType['phase'] == phase) and (appyType['page'] not in res) \ - and self._appy_showPage(appyType['page'], appyType['pageShow']): - res.append(appyType['page']) - for appyType, fieldRel in self.getAppyBackRefs(): - if (appyType['backd']['phase'] == phase) and \ - (appyType['backd']['page'] not in res) and \ - self._appy_showPage(appyType['backd']['page'], - appyType['backd']['pageShow']): - res.append(appyType['backd']['page']) - return res - - def getAppyPhases(self, currentOnly=False, fieldset=None, forPlone=False): + def getAppyPhases(self, currentOnly=False, page=None): '''Gets the list of phases that are defined for this content type. If p_currentOnly is True, the search is limited to the current phase. - If p_fieldset is not None, the search is limited to the phase - corresponding the Plone fieldset whose name is given in this - parameter. If p_forPlone=True, among phase info we write Plone - fieldset names, which are a bit different from Appy page names.''' + If p_page is not None, the search is limited to the phase + where p_page lies.''' # Get the list of phases res = [] # Ordered list of phases phases = {} # Dict of phases - for atField in self.Schema().filterFields(isMetadata=0): - appyType = self.getAppyType(atField.getName()) - if not appyType: continue - if appyType['phase'] not in phases: - phase = PhaseDescr(appyType['phase'], - self.getAppyStates(appyType['phase']), forPlone, self) + for appyType in self.getAllAppyTypes(): + if appyType.phase not in phases: + states = self.getAppyStates(appyType.phase) + phase = PhaseDescr(appyType.phase, states, self) res.append(phase.__dict__) - phases[appyType['phase']] = phase + phases[appyType.phase] = phase else: - phase = phases[appyType['phase']] + phase = phases[appyType.phase] phase.addPage(appyType, self) - for appyType, fieldRel in self.getAppyBackRefs(): - if appyType['backd']['phase'] not in phases: - phase = PhaseDescr(appyType['backd']['phase'], - self.getAppyStates(appyType['backd']['phase']), - forPlone, self) - res.append(phase.__dict__) - phases[appyType['phase']] = phase - else: - phase = phases[appyType['backd']['phase']] - phase.addPage(appyType['backd'], self) # Remove phases that have no visible page for i in range(len(res)-1, -1, -1): if not res[i]['pages']: @@ -626,20 +508,48 @@ class AbstractMixin: del res[i] # Then, compute status of phases for ph in phases.itervalues(): - ph.computeStatus() + ph.computeStatus(res) ph.totalNbOfPhases = len(res) # Restrict the result if we must not produce the whole list of phases if currentOnly: for phaseInfo in res: if phaseInfo['phaseStatus'] == 'Current': return phaseInfo - elif fieldset: + elif page: for phaseInfo in res: - if fieldset in phaseInfo['pages']: + if page in phaseInfo['pages']: return phaseInfo else: return res + def getPreviousPage(self, phase, page): + '''Returns the page that precedes p_page which is in p_phase.''' + pageIndex = phase['pages'].index(page) + if pageIndex > 0: + # We stay on the same phase, previous page + return phase['pages'][pageIndex-1] + else: + if phase['previousPhase']: + # We go to the last page of previous phase + previousPhase = phase['previousPhase'] + return previousPhase['pages'][-1] + else: + return None + + def getNextPage(self, phase, page): + '''Returns the page that follows p_page which is in p_phase.''' + pageIndex = phase['pages'].index(page) + if pageIndex < len(phase['pages'])-1: + # We stay on the same phase, next page + return phase['pages'][pageIndex+1] + else: + if phase['nextPhase']: + # We go to the first page of next phase + nextPhase = phase['nextPhase'] + return nextPhase['pages'][0] + else: + return None + def changeRefOrder(self, fieldName, objectUid, newIndex, isDelta): '''This method changes the position of object with uid p_objectUid in reference field p_fieldName to p_newIndex i p_isDelta is False, or @@ -676,9 +586,7 @@ class AbstractMixin: def isRefSortable(self, fieldName): '''Can p_fieldName, which is a field defined on self, be used as a sort key in a reference field?''' - appyType = self.getAppyType(fieldName, asDict=False) - if not appyType: return True # Probably implicit field 'title'. - return appyType.isSortable(usage='ref') + return self.getAppyType(fieldName).isSortable(usage='ref') def getWorkflow(self, appy=True): '''Returns the Appy workflow instance that is relevant for this @@ -688,7 +596,7 @@ class AbstractMixin: # Get the workflow class first workflowClass = None if self.wrapperClass: - appyClass = self.wrapperClass.__bases__[1] + appyClass = self.wrapperClass.__bases__[-1] if hasattr(appyClass, 'workflow'): workflowClass = appyClass.workflow if workflowClass: @@ -735,21 +643,6 @@ class AbstractMixin: return {'events': history[startNumber:startNumber+batchSize], 'totalNumber': len(history), 'batchSize':batchSize} - def getComputedValue(self, appyType): - '''Computes on p_self the value of the Computed field corresponding to - p_appyType.''' - res = '' - obj = self.appy() - if appyType['method']: - try: - res = appyType['method'](obj) - if not isinstance(res, basestring): - res = repr(res) - except Exception, e: - obj.log(Traceback.get(), type='error') - res = str(e) - return res - def may(self, transitionName): '''May the user execute transition named p_transitionName?''' # Get the Appy workflow instance @@ -785,8 +678,7 @@ class AbstractMixin: def executeAppyAction(self, actionName, reindex=True): '''Executes action with p_fieldName on this object.''' - appyClass = self.wrapperClass.__bases__[1] - appyType = getattr(appyClass, actionName) + appyType = self.getAppyType(actionName) actionRes = appyType(self.appy()) self.reindexObject() return appyType.result, actionRes @@ -802,7 +694,8 @@ class AbstractMixin: suffix = 'ko' if successfull: suffix = 'ok' - label='%s_action_%s' % (self.getLabelPrefix(rq['fieldName']),suffix) + appyType = self.getAppyType(rq['fieldName']) + label = '%s_action_%s' % (appyType.labelId, suffix) msg = self.translate(label) if (resultType == 'computation') or not successfull: self.plone_utils.addPortalMessage(msg) @@ -848,93 +741,74 @@ class AbstractMixin: res = brains return res - def getCssClasses(self, appyType, asSlave=True): - '''Gets the CSS classes (used for master/slave relationships, or if the - field corresponding to p_appyType is focus) for this object, - either as slave (p_asSlave=True) or as master. The HTML element on - which to define the CSS class for a slave or a master is - different. So this method is called either for getting CSS classes - as slave or as master. We set the focus-specific CSS class only when - p_asSlave is True, because we this place as being the "standard" one - for specifying CSS classes for a field.''' - res = '' - if not asSlave and appyType['slaves']: - res = 'appyMaster master_%s' % appyType['id'] - elif asSlave and appyType['master']: - res = 'slave_%s' % appyType['master'].id - res += ' slaveValue_%s_%s' % (appyType['master'].id, - appyType['masterValue']) - # Add the focus-specific class if needed - if appyType['focus']: - prefix = '' - if res: prefix = ' ' - res += prefix + 'appyFocus' - return res - - def fieldValueSelected(self, fieldName, value, vocabValue): + def fieldValueSelected(self, fieldName, vocabValue): '''When displaying a selection box (ie a String with a validator being a list), must the _vocabValue appear as selected?''' - # Check according to database value - if (type(value) in sequenceTypes): - if vocabValue in value: return True + rq = self.REQUEST + # Get the value we must compare (from request or from database) + if rq.has_key(fieldName): + compValue = rq.get(fieldName) else: - if vocabValue == value: return True - # Check according to value in request - valueInReq = self.REQUEST.get(fieldName, None) - if type(valueInReq) in sequenceTypes: - if vocabValue in valueInReq: return True + compValue = self.getAppyType(fieldName).getValue(self) + # Compare the value + if type(compValue) in sequenceTypes: + if vocabValue in compValue: return True else: - if vocabValue == valueInReq: return True - return False + if vocabValue == compValue: return True - def checkboxChecked(self, fieldName, value): + def checkboxChecked(self, fieldName): '''When displaying a checkbox, must it be checked or not?''' - valueInReq = self.REQUEST.get(fieldName, None) - if valueInReq != None: - return valueInReq in ('True', 1, '1') + rq = self.REQUEST + # Get the value we must compare (from request or from database) + if rq.has_key(fieldName): + compValue = rq.get(fieldName) + compValue = compValue in ('True', 1, '1') else: - return value + compValue = self.getAppyType(fieldName).getValue(self) + # Compare the value + return compValue - def getLabelPrefix(self, fieldName=None): - '''For some i18n labels, wee need to determine a prefix, which may be - linked to p_fieldName. Indeed, the prefix may be based on the name - of the (super-)class where p_fieldName is defined.''' - res = self.meta_type - if fieldName: - appyType = self.getAppyType(fieldName) - res = '%s_%s' % (self._appy_getAtType(appyType['selfClass']), - fieldName) - return res + def dateValueSelected(self, fieldName, fieldPart, dateValue): + '''When displaying a date field, must the particular p_dateValue be + selected in the field corresponding to the date part?''' + # Get the value we must compare (from request or from database) + rq = self.REQUEST + partName = '%s_%s' % (fieldName, fieldPart) + if rq.has_key(partName): + compValue = rq.get(partName) + if compValue.isdigit(): + compValue = int(compValue) + else: + compValue = self.getAppyType(fieldName).getValue(self) + if compValue: + compValue = getattr(compValue, fieldPart)() + # Compare the value + return compValue == dateValue + + def getPossibleValues(self, name, withTranslations, withBlankValue, + className=None): + '''Gets the possible values for field named p_name. This field must be a + String with isSelection()=True. If p_withTranslations is True, + instead of returning a list of string values, the result is a list + of tuples (s_value, s_translation). If p_withBlankValue is True, a + blank value is prepended to the list. If no p_className is defined, + the field is supposed to belong to self's class''' + appyType = self.getAppyType(name, className=className) + return appyType.getPossibleValues(self,withTranslations,withBlankValue) def appy(self): '''Returns a wrapper object allowing to manipulate p_self the Appy way.''' - return self.wrapperClass(self) - - def _appy_getSourceClass(self, fieldName, baseClass): - '''We know that p_fieldName was defined on Python class p_baseClass or - one of its parents. This method returns the exact class (p_baseClass - or a parent) where it was defined.''' - if fieldName in baseClass.__dict__: - return baseClass - else: - return self._appy_getSourceClass(fieldName, baseClass.__bases__[0]) - - def _appy_getTypeAsDict(self, fieldName, appyType, baseClass): - '''Within page templates, the appyType is given as a dict instead of - an object in order to avoid security problems.''' - appyType.selfClass = self._appy_getSourceClass(fieldName, baseClass) - res = appyType.__dict__ - if res.has_key('back') and res['back'] and (not res.has_key('backd')): - res['backd'] = res['back'].__dict__ - # I create a new entry "backd"; if I put the dict in "back" I - # really modify the initial appyType object and I don't want to do - # this. - # Add the i18n label for the field - if not res.has_key('label'): - res['label'] = '%s_%s' % (self._appy_getAtType(appyType.selfClass), - fieldName) - return res + # Create the dict for storing Appy wrapper on the REQUEST if needed. + rq = self.REQUEST + if not hasattr(rq, 'appyWrappers'): rq.appyWrappers = {} + # Return the Appy wrapper from rq.appyWrappers if already there + uid = self.UID() + if uid in rq.appyWrappers: return rq.appyWrappers[uid] + # Create the Appy wrapper, cache it in rq.appyWrappers and return it + wrapper = self.wrapperClass(self) + rq.appyWrappers[uid] = wrapper + return wrapper def _appy_getAtType(self, appyClass, flavour=None): '''Gets the name of the Archetypes class that corresponds to @@ -942,7 +816,7 @@ class AbstractMixin: application). If p_flavour is specified, the method returns the name of the specific Archetypes class in this flavour (ie suffixed with the flavour number).''' - res = ArchetypesClassDescriptor.getClassName(appyClass) + res = ClassDescriptor.getClassName(appyClass) appName = self.getProductConfig().PROJECTNAME if res.find('Extensions_appyWrappers') != -1: # This is not a content type defined Maybe I am a tool or flavour @@ -967,14 +841,8 @@ class AbstractMixin: maxOne = False if noListIfSingleObj: # I must get the referred appyType to know its maximum multiplicity. - referers = self.getProductConfig().referers - className = self.__class__.__name__ - appyType = None - for anAppyType, rel in referers[className]: - if rel == relName: - appyType = anAppyType - break - if appyType.back.multiplicity[1] == 1: + appyType = self.getAppyType(fieldName) + if appyType.multiplicity[1] == 1: maxOne = True # Get the referred objects through the Archetypes relationship. objs = self.getBRefs(relName) @@ -1021,9 +889,9 @@ class AbstractMixin: # On this folder, set "add" permissions for every content type that will # be created through reference fields allCreators = set() - for field in self.schema.fields(): - if field.type == 'reference': - refContentTypeName= self.getAppyRefPortalType(field.getName()) + for appyType in self.getAllAppyTypes(): + if appyType.type == 'Ref': + refContentTypeName = self.getAppyRefPortalType(appyType.name) refContentType = getattr(self.portal_types, refContentTypeName) refMetaType = refContentType.content_meta_type if refMetaType in self.getProductConfig(\ @@ -1046,143 +914,6 @@ class AbstractMixin: updateRolesForPermission('Add portal content', tuple(allCreators), folder) - def _appy_getDisplayList(self, values, labels, domain): - '''Creates a DisplayList given a list of p_values and corresponding - i18n p_labels.''' - res = [] - i = -1 - for v in values: - i += 1 - res.append( (v, self.utranslate(labels[i], domain=domain))) - return self.getProductConfig().DisplayList(tuple(res)) - - def _appy_getDynamicDisplayList(self, methodName): - '''Calls the method named p_methodName for producing a DisplayList from - values computed dynamically. If methodName begins with _appy_, it is - a special Appy method: we will call it on the Mixin directly. Else, - it is a user method: we will call it on the wrapper. Some args can - be hidden into p_methodName, separated with stars, like in this - example: method1*arg1*arg2. Only string params are supported.''' - # Unwrap parameters if any. - if methodName.find('*') != -1: - elems = methodName.split('*') - methodName = elems[0] - args = elems[1:] - else: - args = () - # On what object must be call the method that will produce the values? - obj = self - if methodName.startswith('tool:'): - obj = self.getTool() - methodName = methodName[5:] - # Do we need to call the method on the object or on the wrapper? - if methodName.startswith('_appy_'): - exec 'res = obj.%s(*args)' % methodName - else: - exec 'res = obj.appy().%s(*args)' % methodName - return self.getProductConfig().DisplayList(tuple(res)) - - nullValues = (None, '', ' ') - numbersMap = {'Integer': 'int', 'Float': 'float'} - validatorTypes = (types.FunctionType, type(String.EMAIL)) - def _appy_validateField(self, fieldName, value, label, specificType): - '''Checks whether the p_value entered in field p_fieldName is - correct.''' - appyType = self.getAppyType(fieldName) - msgId = None - if (specificType == 'Ref') and appyType['link']: - # We only check "link" Refs because in edit views, "add" Refs are - # not visible. So if we check "add" Refs, on an "edit" view we will - # believe that that there is no referred object even if there is. - # If the field is a reference, appy must ensure itself that - # multiplicities are enforced. - fieldValue = self.REQUEST.get('appy_ref_%s' % fieldName, '') - if not fieldValue: - nbOfRefs = 0 - elif isinstance(fieldValue, basestring): - nbOfRefs = 1 - else: - nbOfRefs = len(fieldValue) - minRef = appyType['multiplicity'][0] - maxRef = appyType['multiplicity'][1] - if maxRef == None: - maxRef = sys.maxint - if nbOfRefs < minRef: - msgId = 'min_ref_violated' - elif nbOfRefs > maxRef: - msgId = 'max_ref_violated' - elif specificType in self.numbersMap: # Float, Integer - pyType = self.numbersMap[specificType] - # Validate only if input value is there. - # By the way, we also convert the value. - if value not in self.nullValues: - try: - exec 'value = %s(value)' % pyType - except ValueError: - msgId = 'bad_%s' % pyType - else: - value = None - # Apply the custom validator if it exists - validator = appyType['validator'] - if not msgId and (type(validator) in self.validatorTypes): - obj = self.appy() - if type(validator) == self.validatorTypes[0]: - # It is a custom function. Execute it. - try: - validValue = validator(obj, value) - if isinstance(validValue, basestring) and validValue: - # Validation failed; and p_validValue contains an error - # message. - return validValue - else: - if not validValue: - msgId = label - except Exception, e: - return str(e) - except: - msgId = label - elif type(validator) == self.validatorTypes[1]: - # It is a regular expression - if (value not in self.nullValues) and \ - not validator.match(value): - # If the regular expression is among the default ones, we - # generate a specific error message. - if validator == String.EMAIL: - msgId = 'bad_email' - elif validator == String.URL: - msgId = 'bad_url' - elif validator == String.ALPHANUMERIC: - msgId = 'bad_alphanumeric' - else: - msgId = label - res = msgId - if msgId: - res = self.utranslate(msgId, domain=self.i18nDomain) - return res - - def validateAllFields(self, REQUEST, errors): - '''This method is called when individual validation of all fields - succeed (when editing or creating an object). Then, this method - performs inter-field validation. This way, the user must first - correct individual fields before being confronted to potential - inter-fields validation errors.''' - obj = self.appy() - if not hasattr(obj, 'validate'): return - appyRequest = getAppyRequest(REQUEST, obj) - appyErrors = ValidationErrors() - obj.validate(appyRequest, appyErrors) - # This custom "validate" method may have added fields in the given - # ValidationErrors instance. Now we must fill the Zope "errors" dict - # based on it. For every error message that is not a string, - # we replace it with the standard validation error for the - # corresponding field. - for key, value in appyErrors.__dict__.iteritems(): - resValue = value - if not isinstance(resValue, basestring): - msgId = '%s_valid' % self.getLabelPrefix(key) - resValue = self.utranslate(msgId, domain=self.i18nDomain) - errors[key] = resValue - def _appy_getPortalType(self, request): '''Guess the portal_type of p_self from info about p_self and p_request.''' @@ -1235,6 +966,9 @@ class AbstractMixin: for requestKey in self.REQUEST.keys(): if requestKey.startswith('appy_ref_'): fieldName = requestKey[9:] + # Security check + if not self.getAppyType(fieldName).isShowable(self, 'edit'): + continue fieldsInRequest.append(fieldName) fieldValue = self.REQUEST[requestKey] sortedRefField = self._appy_getSortedField(fieldName) @@ -1250,19 +984,16 @@ class AbstractMixin: exec 'self.set%s%s(refObjects)' % (fieldName[0].upper(), fieldName[1:]) # Manage Ref fields that are not present in the request - currentFieldset = self.REQUEST.get('fieldset', 'default') - for field in self.schema.fields(): - if (field.type == 'reference') and \ - (field.schemata == currentFieldset) and \ - (field.getName() not in fieldsInRequest): + currentPage = self.REQUEST.get('page', 'main') + for appyType in self.getAllAppyTypes(): + if (appyType.type == 'Ref') and not appyType.isBack and \ + (appyType.page == currentPage) and \ + (appyType.name not in fieldsInRequest): # If this field is visible, it was not present in the request: # it means that we must remove any Ref from it. - fieldName = field.getName() - appyType = self.getAppyType(fieldName) - fieldDescr = FieldDescr(field, appyType, None) - if self.showField(fieldDescr, isEdit=True): - exec 'self.set%s%s([])' % (fieldName[0].upper(), - fieldName[1:]) + if appyType.isShowable(self, 'edit'): + exec 'self.set%s%s([])' % (appyType.name[0].upper(), + appyType.name[1:]) def getUrl(self): '''Returns the Appy URL for viewing this object.''' @@ -1274,4 +1005,40 @@ class AbstractMixin: if not domain: domain = cfg.PROJECTNAME return self.translation_service.utranslate( domain, label, mapping, self, default=default) + + def getPageLayout(self, layoutType): + '''Returns the layout coresponding to p_layoutType for p_self.''' + appyClass = self.wrapperClass.__bases__[-1] + if hasattr(appyClass, 'layouts'): + layout = appyClass.layouts[layoutType] + if isinstance(layout, basestring): + layout = Table(layout) + else: + layout = defaultPageLayouts[layoutType] + return layout.get() + + def getPageTemplate(self, skyn, templateName): + '''Returns, in the skyn folder, the page template corresponding to + p_templateName.''' + res = skyn + for name in templateName.split('/'): + res = res.get(name) + return res + + def download(self): + '''Downloads the content of the file that is in the File field named + p_name.''' + name = self.REQUEST.get('name') + if not name: return + appyType = self.getAppyType(name) + if (not appyType.type =='File') or not appyType.isShowable(self,'view'): + return + theFile = getattr(self, name, None) + if theFile: + response = self.REQUEST.RESPONSE + response.setHeader('Content-Disposition', 'inline;filename="%s"' % \ + theFile.filename) + response.setHeader('Cachecontrol', 'no-cache') + response.setHeader('Expires', 'Thu, 11 Dec 1975 12:05:05 GMT') + return theFile.index_html(self.REQUEST, self.REQUEST.RESPONSE) # ------------------------------------------------------------------------------ diff --git a/gen/plone25/model.py b/gen/plone25/model.py index 7d8248f..ee970f1 100644 --- a/gen/plone25/model.py +++ b/gen/plone25/model.py @@ -7,7 +7,7 @@ # ------------------------------------------------------------------------------ import copy, types -from appy.gen import Type, Integer, String, File, Ref, Boolean, Selection +from appy.gen import Type, Integer, String, File, Ref, Boolean, Selection, Group # ------------------------------------------------------------------------------ class ModelClass: @@ -17,10 +17,12 @@ class ModelClass: prefixed with _appy_ in order to avoid name conflicts with user-defined parts of the application model.''' _appy_attributes = [] # We need to keep track of attributes order. - _appy_notinit = ('id', 'type', 'pythonType', 'slaves', 'selfClass', - 'phase', 'pageShow', 'isSelect') # When creating a new - # instance of a ModelClass, those attributes must not be - # given in the constructor. + # When creating a new instance of a ModelClass, the following attributes + # must not be given in the constructor (they are computed attributes). + _appy_notinit = ('id', 'type', 'pythonType', 'slaves', 'phase', 'pageShow', + 'isSelect', 'hasLabel', 'hasDescr', 'hasHelp', + 'master_css', 'layouts', 'required', 'filterable', + 'validable', 'backd', 'isBack') @classmethod def _appy_addField(klass, fieldName, fieldType, classDescr): @@ -38,8 +40,11 @@ class ModelClass: continue if isinstance(attrValue, basestring): attrValue = '"%s"' % attrValue - elif isinstance(attrValue, Type): - attrValue = klass._appy_getTypeBody(attrValue) + elif isinstance(attrValue, Ref): + if attrValue.isBack: + attrValue = klass._appy_getTypeBody(attrValue) + else: + continue elif type(attrValue) == type(ModelClass): moduleName = attrValue.__module__ if moduleName.startswith('appy.gen'): @@ -48,6 +53,10 @@ class ModelClass: attrValue = '%s.%s' % (moduleName, attrValue.__name__) elif isinstance(attrValue, Selection): attrValue = 'Selection("%s")' % attrValue.methodName + elif isinstance(attrValue, Group): + attrValue = 'Group("%s")' % attrValue.name + elif type(attrValue) == types.FunctionType: + attrValue = '%sWrapper.%s'% (klass.__name__, attrValue.__name__) typeArgs += '%s=%s,' % (attrName, attrValue) return '%s(%s)' % (appyType.__class__.__name__, typeArgs) @@ -106,10 +115,15 @@ class Flavour(ModelClass): '''From a given p_appyType, produce a type definition suitable for storing the default value for this field.''' res = copy.copy(appyType) + # A fiekd in the flavour can't have parameters that would lead to the + # creation of new fields in the flavour. res.editDefault = False res.optional = False res.show = True + res.group = copy.copy(appyType.group) res.phase = 'main' + # Set default layouts for all Flavour fields + res.layouts = None res.specificReadPermission = False res.specificWritePermission = False res.multiplicity = (0, appyType.multiplicity[1]) @@ -136,7 +150,7 @@ class Flavour(ModelClass): klass._appy_addField(fieldName, fieldType, fieldDescr.classDescr) fieldType.validator.append(fieldDescr.fieldName) fieldType.page = 'data' - fieldType.group = fieldDescr.classDescr.klass.__name__ + fieldType.group = Group(fieldDescr.classDescr.klass.__name__) @classmethod def _appy_addDefaultField(klass, fieldDescr): @@ -145,7 +159,7 @@ class Flavour(ModelClass): fieldType = klass._appy_copyField(fieldDescr.appyType) klass._appy_addField(fieldName, fieldType, fieldDescr.classDescr) fieldType.page = 'data' - fieldType.group = fieldDescr.classDescr.klass.__name__ + fieldType.group = Group(fieldDescr.classDescr.klass.__name__) @classmethod def _appy_addPodRelatedFields(klass, fieldDescr): @@ -276,7 +290,9 @@ class Tool(ModelClass): # First arg is None because we don't know yet if it will link # to the predefined Flavour class or a custom class defined # in the application. - unoEnabledPython = String(group="connectionToOpenOffice") + def validPythonWithUno(self, value): pass + unoEnabledPython = String(group="connectionToOpenOffice", + validator=validPythonWithUno) openOfficePort = Integer(default=2002, group="connectionToOpenOffice") numberOfResultsPerPage = Integer(default=30) listBoxesMaximumWidth = Integer(default=100) diff --git a/gen/plone25/skin/ajax.pt b/gen/plone25/skin/ajax.pt index a8c2acc..b305341 100644 --- a/gen/plone25/skin/ajax.pt +++ b/gen/plone25/skin/ajax.pt @@ -4,22 +4,23 @@ It can also have a parameter "action", that refers to a method that will be triggered on contextObj before returning the result of the macro to the browser. - + template python: contextObj.getPageTemplate(portal.skyn, page); + dummy python: response.setHeader('Content-Type','text/html;;charset=utf-8'); + dummy2 python: response.setHeader('Expires', 'Mon, 11 Dec 1975 12:05:05 GMT'); + dummy3 python: response.setHeader('CacheControl', 'no-cache')"> Keys "Expires" and "CacheControl" are used for preventing IE to cache this page. Indeed, this page is retrieved through an asynchronous XMLHttpRequest by the browser, and IE caches this by default. - + - + diff --git a/gen/plone25/skin/cancel.png b/gen/plone25/skin/cancel.png new file mode 100644 index 0000000..cb7ffc7 Binary files /dev/null and b/gen/plone25/skin/cancel.png differ diff --git a/gen/plone25/skin/do.py b/gen/plone25/skin/do.py index ac77204..b9320db 100644 --- a/gen/plone25/skin/do.py +++ b/gen/plone25/skin/do.py @@ -12,4 +12,4 @@ else: from Products.CMFCore.utils import getToolByName portal = getToolByName(obj, 'portal_url').getPortalObject() obj = portal.get('portal_%s' % obj.id.lower()) # The tool -return obj.getAppyValue('on'+action)() +return obj.getMethod('on'+action)() diff --git a/gen/plone25/skin/edit.pt b/gen/plone25/skin/edit.pt index 767bc3a..2587862 100644 --- a/gen/plone25/skin/edit.pt +++ b/gen/plone25/skin/edit.pt @@ -1,24 +1,18 @@ - + - Archetypes stuff for managing Javascript and CSS. - If I remove this stuff, Javascript popup for dates does not work anyore. - - - - - + Include type-specific CSS and JS. + + - - - - - + - + - - - -
-
- +
-

- - - + - - - Buttons (Previous, Next, Save, etc) - - - - - - - - - - - - - + + -
+ - + diff --git a/gen/plone25/skin/editBig.png b/gen/plone25/skin/editBig.png new file mode 100644 index 0000000..afdc52a Binary files /dev/null and b/gen/plone25/skin/editBig.png differ diff --git a/gen/plone25/skin/help.jpg b/gen/plone25/skin/help.jpg new file mode 100644 index 0000000..199ba41 Binary files /dev/null and b/gen/plone25/skin/help.jpg differ diff --git a/gen/plone25/skin/help.png b/gen/plone25/skin/help.png new file mode 100644 index 0000000..8afba6c Binary files /dev/null and b/gen/plone25/skin/help.png differ diff --git a/gen/plone25/skin/import.pt b/gen/plone25/skin/import.pt index fd7ce29..8da3c5f 100644 --- a/gen/plone25/skin/import.pt +++ b/gen/plone25/skin/import.pt @@ -20,7 +20,7 @@ importElems python: flavour.getImportElements(contentType); global allAreImported python:True"> -
+
- Global form for deleting an object -
- - -
- Global form for generating a document from a pod template. -
- - templateUid is given if class-wide pod, fieldName and podFormat are given if podField. - - - - -
-
- -
- - Information that is common to all tabs (object title, state, etc) - - - Title, edit icon and state - - - - - Content type description - - - - - - Object history - - - - - Workflow-related information and actions - - - -
- - Show the phase name tied to this page - − - : - - - When no tabs are shown, we provide an edit icon. - - -
-
- Creator and last modification date - Plus/minus icon for accessing history - -   -   - - - Show document creator - - - by - — - - - Show last modification date - - - -
- -
- -
-
-
- - - - - -
-
- - - Tabs -
    -
  • - - - - - -
  • -
-
- -
- -
- - Every item in fieldDescr is a FieldDescr instance, + Every item in fieldDescrs is an Appy type (dict version), excepted for workflow state (which is not a field): in this case it is simply the string "workflow_state". @@ -871,12 +60,12 @@ Columns corresponding to other fields - Display header for a "standard" field - + Display header for the workflow state @@ -906,23 +95,22 @@ tal:content="obj/Title" tal:attributes="href python: obj.getUrl() + '/?' + navInfo"> Columns corresponding to other fields - - - + + + - + condition="python: contextObj.showField(widget['name'], 'view')"> + - Field - not found. + Field + not found. - + @@ -969,70 +157,3 @@ - - - This macro displays phases defined for a given content type, - only if more than one phase is defined. - - - - - - - - - -
- - -
-
- - - - - - - - - -
- - -
-
- - -
- - - - - Input field allowing to enter a comment before triggering a transition - - - Buttons for triggering transitions - - -
- - - - -
-
-
diff --git a/gen/plone25/skin/next.png b/gen/plone25/skin/next.png new file mode 100644 index 0000000..b0a9fcc Binary files /dev/null and b/gen/plone25/skin/next.png differ diff --git a/gen/plone25/skin/page.pt b/gen/plone25/skin/page.pt new file mode 100644 index 0000000..1ec4c9e --- /dev/null +++ b/gen/plone25/skin/page.pt @@ -0,0 +1,728 @@ + + This macro contains global page-related Javascripts. + +
+ Global elements used in every page. + + Javascript messages + + + "Static" javascripts + + Global form for deleting an object +
+ + +
+ Global form for generating a document from a pod template. +
+ + templateUid is given if class-wide pod, fieldName and podFormat are given if podField. + + + + +
+
+ + + This macro shows the content of page. Because a page is a layouted object, + we simply call the macro that displays a layouted object. + contextObj The Zope object for which this page must be shown + layoutType The kind of layout: "view"? "edit"? "cell"? + layout The layout object that will dictate how object content + will be rendered. + + + + + + + This macro displays all widgets of a given page. It requires: + contextObj The Zope object for which widgets must be shown + page We show widgets of a given page + layoutType We must know if we must render the widgets in a "view", + "edit" or "cell" layout + + + + + + +
+ + + +
+ + + This macro lists the POD templates that are available. It is used by macro "header" below. + +
+ + Display templates as links if a few number of templates must be shown + + + + + +   + Display templates as a list if a lot of templates must be shown + + +
+ + + This macro displays an object's history. It is used by macro "header" below. + + + + Table containing the history + + + + + + + + + + + + +
+ + + +
+ + + + + + Display the previous values of the fields whose value were modified in this change. + + + + + + + + + +
+ +
    +
  • +
+
+
+
+
+ + + This macro displays an object's state(s). It is used by macro "header" below. + + + + + + + + + +
+ + +
+
+ + + This macro displays an object's transitions(s). It is used by macro "header" below. + + +
+ + + + + Input field allowing to enter a comment before triggering a transition + + + Buttons for triggering transitions + + +
+ + + + +
+
+
+ + + This macros displays the page header, containing object title, + workflow-related info, object history, etc. + +
+ + Information that is common to all tabs (object title, state, etc) + + + Title and state + + + + + Content type description + + + + + + Object history + + + + Workflow-related information and actions + + + +
+ + +
+
+ Creator and last modification date + Plus/minus icon for accessing history + +   +   + + + Show document creator + + + by + — + + + Show last modification date + + + +
+ +
+ +
+
+
+ + + + + +
+
+
+ + + The page footer. + + + + + + + + This macro shows the range of buttons (next, previous, save,...). + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + This macro displays the global message on the page. + + + Single message from portal_status_message request key +
+ + Messages added via plone_utils + + +
+
+
+
diff --git a/gen/plone25/skin/portlet.pt b/gen/plone25/skin/portlet.pt index ec6d3ca..8a0d6be 100644 --- a/gen/plone25/skin/portlet.pt +++ b/gen/plone25/skin/portlet.pt @@ -2,9 +2,10 @@ This macro displays the content of the application portlet. + tal:define="queryUrl python: '%s/skyn/query' % appFolder.absolute_url(); + currentSearch request/search|nothing; + currentType request/type_name|nothing; + contextObj python: tool.getPublishedObject(rootClasses)"> Portlet title, with link to tool.
If there is only one flavour, clicking on the portlet @@ -27,6 +28,14 @@
+ +
+ +
+
+
+ TODO: implement a widget for selecting the needed flavour. Create a section for every root class. @@ -34,7 +43,7 @@ define="flavourNumber python:1; flavour python: tool.getFlavour('Dummy_%d' % flavourNumber)"> Section title, with action icons -
+
@@ -272,18 +239,17 @@ -
Edit macro for an Ref. +
This macro displays the Reference widget on an "edit" page @@ -301,3 +267,11 @@ selected python:test((valueIsInReq and (brain.UID in request.get(appyFieldName, []))) or (not valueIsInReq and ((brain.UID in refUids) or (isBeingCreated and (brain.UID==defaultValueUID)))), True, False)"/>
+ +Cell macro for a Ref. + + + + +Search macro for a Ref. + diff --git a/gen/plone25/skin/widgets/show.pt b/gen/plone25/skin/widgets/show.pt new file mode 100644 index 0000000..68e445d --- /dev/null +++ b/gen/plone25/skin/widgets/show.pt @@ -0,0 +1,203 @@ + + This macro shows the content of a layouted object, like a page or widget. + It requires: + contextObj The Zope object on which we are working + layoutType The kind of layout: "view"? "edit"? "cell"? + layout The layout object that will dictate how object content + will be rendered. + Options: + contextMacro The base on folder containing the macros to call for + rendering the elements within the layout. + Defaults to portal.skyn + + +
@@ -44,7 +53,7 @@ Create a new object from a web form -
- -
- Greyed transparent zone that is deployed on the whole screen when a popup is displayed. @@ -140,3 +144,52 @@ + + + This macro displays, within the portlet, the navigation tree for the + currently shown object, made of phases and contained pages. + + + + + The box containing phase-related information + + + + The down arrow pointing to the next phase (if any) + + + + +
+ + + + + + + + + +
+ + + + +
+
  
+
diff --git a/gen/plone25/skin/previous.png b/gen/plone25/skin/previous.png new file mode 100644 index 0000000..4b77361 Binary files /dev/null and b/gen/plone25/skin/previous.png differ diff --git a/gen/plone25/skin/query.pt b/gen/plone25/skin/query.pt index 211ca4c..affb630 100644 --- a/gen/plone25/skin/query.pt +++ b/gen/plone25/skin/query.pt @@ -20,7 +20,7 @@ flavourNumber python:int(context.REQUEST.get('flavourNumber')); searchName python:context.REQUEST.get('search', '')"> -
+
Query result
diff --git a/gen/plone25/skin/required.png b/gen/plone25/skin/required.png new file mode 100644 index 0000000..ac8daa3 Binary files /dev/null and b/gen/plone25/skin/required.png differ diff --git a/gen/plone25/skin/save.png b/gen/plone25/skin/save.png new file mode 100644 index 0000000..4aeab2a Binary files /dev/null and b/gen/plone25/skin/save.png differ diff --git a/gen/plone25/skin/search.pt b/gen/plone25/skin/search.pt index bdfa458..c706271 100644 --- a/gen/plone25/skin/search.pt +++ b/gen/plone25/skin/search.pt @@ -32,13 +32,13 @@ - diff --git a/gen/plone25/skin/space.gif b/gen/plone25/skin/space.gif new file mode 100644 index 0000000..8dc4bb1 Binary files /dev/null and b/gen/plone25/skin/space.gif differ diff --git a/gen/plone25/skin/tabBg.png b/gen/plone25/skin/tabBg.png new file mode 100644 index 0000000..4eb1fff Binary files /dev/null and b/gen/plone25/skin/tabBg.png differ diff --git a/gen/plone25/skin/tabBgu.png b/gen/plone25/skin/tabBgu.png new file mode 100644 index 0000000..9318415 Binary files /dev/null and b/gen/plone25/skin/tabBgu.png differ diff --git a/gen/plone25/skin/tabLeft.png b/gen/plone25/skin/tabLeft.png new file mode 100644 index 0000000..3f41de8 Binary files /dev/null and b/gen/plone25/skin/tabLeft.png differ diff --git a/gen/plone25/skin/tabLeftu.png b/gen/plone25/skin/tabLeftu.png new file mode 100644 index 0000000..91443e8 Binary files /dev/null and b/gen/plone25/skin/tabLeftu.png differ diff --git a/gen/plone25/skin/tabRight.png b/gen/plone25/skin/tabRight.png new file mode 100644 index 0000000..7fe635d Binary files /dev/null and b/gen/plone25/skin/tabRight.png differ diff --git a/gen/plone25/skin/tabRightu.png b/gen/plone25/skin/tabRightu.png new file mode 100644 index 0000000..bac7a7f Binary files /dev/null and b/gen/plone25/skin/tabRightu.png differ diff --git a/gen/plone25/skin/view.pt b/gen/plone25/skin/view.pt index d8336f7..30cd220 100644 --- a/gen/plone25/skin/view.pt +++ b/gen/plone25/skin/view.pt @@ -18,20 +18,19 @@ tal:define="contextObj python:context.getParentNode(); portal_type python:here.getPortalTypeName().lower().replace(' ', '_'); errors python:request.get('errors', {}); - isEdit python:False; + layoutType python:'view'; + layout python: contextObj.getPageLayout(layoutType); tool contextObj/getTool; flavour python: tool.getFlavour(contextObj); appFolder tool/getAppFolder; - appName appFolder/id; - phaseInfo python: contextObj.getAppyPhases(currentOnly=True, forPlone=False); - phase request/phase|phaseInfo/name; - appyPages python: contextObj.getAppyPages(phase); - pageName python: contextObj.getAppyPage(isEdit, phaseInfo, appyPages); + appName appFolder/getId; + page request/page|python:'main'; + phaseInfo python: contextObj.getAppyPhases(page=page); + phase phaseInfo/name; showWorkflow python: flavour.getAttr('showWorkflowFor' + contextObj.meta_type)"> - - - - + + + diff --git a/gen/plone25/skin/warning.png b/gen/plone25/skin/warning.png new file mode 100644 index 0000000..1465cd5 Binary files /dev/null and b/gen/plone25/skin/warning.png differ diff --git a/gen/plone25/skin/warning_no.png b/gen/plone25/skin/warning_no.png new file mode 100644 index 0000000..9edbbb7 Binary files /dev/null and b/gen/plone25/skin/warning_no.png differ diff --git a/gen/plone25/skin/widgets.pt b/gen/plone25/skin/widgets.pt deleted file mode 100644 index 9831828..0000000 --- a/gen/plone25/skin/widgets.pt +++ /dev/null @@ -1,142 +0,0 @@ - -
   - - - - - - - -
-
- - -
   - - - - - - - -
-
- - -
   - Show a simple search field for most String fields. - - - - Show a multi-selection box for fields whose validator defines a list of values, with a "AND/OR" checkbox. - - The "and" / "or" radio buttons - - - - -
-
- The list of values - -

-
- - -
   - - - - - - - - - - - -
-
- - - -
- - - - + + + + +
- From - - - - - - To - - - - - -
  - - - / - / - -
- - - / - / - -
- - - -

-
- - -

-
- - -

-
- - -

-
- - -

-
diff --git a/gen/plone25/skin/widgets/action.pt b/gen/plone25/skin/widgets/action.pt new file mode 100644 index 0000000..8020dc3 --- /dev/null +++ b/gen/plone25/skin/widgets/action.pt @@ -0,0 +1,30 @@ +View macro for an Action. + +
+ + + + + + The previous onClick is simply used to prevent Plone + from adding a CSS class that displays a popup when the user triggers the form multiple + times. +
+
+ +Edit macro for an Action. + + +Cell macro for an Action. + + + + +Search macro for an Action. + diff --git a/gen/plone25/skin/widgets/boolean.pt b/gen/plone25/skin/widgets/boolean.pt new file mode 100644 index 0000000..ed1bbec --- /dev/null +++ b/gen/plone25/skin/widgets/boolean.pt @@ -0,0 +1,39 @@ +View macro for a Boolean. + + +Edit macro for an Boolean. + + +   + + +Cell macro for an Boolean. + + + + +Search macro for an Boolean. + +
   + + + + + + + + + + + +
+
diff --git a/gen/plone25/skin/widgets/computed.pt b/gen/plone25/skin/widgets/computed.pt new file mode 100644 index 0000000..23a0a8e --- /dev/null +++ b/gen/plone25/skin/widgets/computed.pt @@ -0,0 +1,18 @@ +View macro for a Computed. + + + + + +Edit macro for a Computed. + + + + +Cell macro for a Computed. + + + + +Search macro for a Computed. + diff --git a/gen/plone25/skin/widgets/date.pt b/gen/plone25/skin/widgets/date.pt new file mode 100644 index 0000000..bd174be --- /dev/null +++ b/gen/plone25/skin/widgets/date.pt @@ -0,0 +1,132 @@ +View macro for a Date. + + +Edit macro for an Date. + + This field is not used but required by the Javascript popup. + + Day + + + Month + + + Year + + The icon for displaying the date chooser + + + + : + + + + +Cell macro for an Date. + + + + +Search macro for an Date. + + + + From + + + + + + To + + + + + +
  + + + / + / + +
+ + + / + / + +
+
diff --git a/gen/plone25/skin/widgets/file.pt b/gen/plone25/skin/widgets/file.pt new file mode 100644 index 0000000..332593e --- /dev/null +++ b/gen/plone25/skin/widgets/file.pt @@ -0,0 +1,73 @@ +View macro for a File. + + + + +   - + + + + + + - + + +Edit macro for an File. + + +
+
+ + Keep the file untouched. + + +
+ Delete the file. + + + +
+
+ Replace with a new file. + + +
+
+The upload field. + + +
+ +Cell macro for an File. + + + + +Search macro for an File. + diff --git a/gen/plone25/skin/widgets/float.pt b/gen/plone25/skin/widgets/float.pt new file mode 100644 index 0000000..9ae53a6 --- /dev/null +++ b/gen/plone25/skin/widgets/float.pt @@ -0,0 +1,29 @@ +View macro for a Float. + + + + +Edit macro for an Float. + + + + +Cell macro for an Float. + + + + +Search macro for an Float. + +
   + + + + + + + +
+
diff --git a/gen/plone25/skin/widgets/info.pt b/gen/plone25/skin/widgets/info.pt new file mode 100644 index 0000000..5eeee67 --- /dev/null +++ b/gen/plone25/skin/widgets/info.pt @@ -0,0 +1,11 @@ +View macro for an Info. +Shows nothing more. + +Edit macro for an Info. + + +Cell macro for an Info. + + +Search macro for an Info. + diff --git a/gen/plone25/skin/widgets/integer.pt b/gen/plone25/skin/widgets/integer.pt new file mode 100644 index 0000000..02a11ce --- /dev/null +++ b/gen/plone25/skin/widgets/integer.pt @@ -0,0 +1,28 @@ +View macro for an Integer. + + + + +Edit macro for an Integer. + + + + +Cell macro for an Integer. + + + + +Search macro for an Integer. + +
   + + + + + + + +
+
diff --git a/gen/plone25/skin/widgets/pod.pt b/gen/plone25/skin/widgets/pod.pt new file mode 100644 index 0000000..e9b8c05 --- /dev/null +++ b/gen/plone25/skin/widgets/pod.pt @@ -0,0 +1,26 @@ +View macro for a Pod. + + + + + + + + +Edit macro for a Pod. + + +Cell macro for a Pod. + + + + +Search macro for a Pod. + diff --git a/gen/plone25/skin/ref.pt b/gen/plone25/skin/widgets/ref.pt similarity index 63% rename from gen/plone25/skin/ref.pt rename to gen/plone25/skin/widgets/ref.pt index dc2f077..47974e8 100644 --- a/gen/plone25/skin/ref.pt +++ b/gen/plone25/skin/widgets/ref.pt @@ -1,5 +1,6 @@ - We begin with some sub-macros used within - macro "showReference" defined below. + + We begin with some sub-macros used within macro "show" defined below. + Displays the title of a referenced object, with a link on @@ -9,7 +10,7 @@ from one object to the next/previous on skyn/view. @@ -77,42 +78,28 @@ onClick python: ajaxBaseCall.replace('**v**', 'True')"/> - - This macro shows a reference field. More precisely, it shows nothing, but calls - a Javascript function that will asynchonously call (via a XmlHttpRequest object) the - macro 'showReferenceContent' defined below, that will really show content. - It requires: - - isBack (bool) Is the reference a backward or forward reference? - - fieldName (string) The name of the reference field (if it is a forward reference) - or the name of the Archetypes relationship (if it is a backward reference) - - innerRef (bool) Are we rendering a reference within a reference or not? - - contextObj (object) the object from which the reference starts - - labelId (string) the i18n id of the reference field label - - descrId (string) the i18n id of the reference field description - -
+View macro for a Ref. +
- This macro is called by a XmlHttpRequest for displaying the paginated referred objects - of a reference field. + This macro is called by a XmlHttpRequest for displaying the paginated + referred objects of a reference field. -
+ label python: tool.translate(appyType['labelId']); + description python: tool.translate(appyType['descrId']); + navBaseCall python: 'askRefField(\'%s\',\'%s\',\'%s\',\'%s\',**v**)' % (ajaxHookId, contextObj.absolute_url(), fieldName, innerRef)"> This macro displays the Reference widget on a "consult" page. @@ -139,20 +126,20 @@ Display a simplified widget if maximum number of referenced objects is 1. - + If there is no object... - + If there is an object... - - + @@ -165,12 +152,12 @@ () - + Object description -

+ Appy (top) navigation @@ -184,35 +171,29 @@ Show backward reference(s)
- + +
+ tal:condition="python: appyType['isBack'] and objs"> -
+
Show forward reference(s) + width python:test(innerRef, '100%', appyType['layouts']['view']['width']);" + align="right" tal:condition="python: not appyType['isBack'] and objs" cellpadding="0" cellspacing="0"> + - @@ -222,41 +203,27 @@ Object title, shown here if not specified somewhere else in appyType.shownInfo.Additional fields that must be shown - Actions +
- + - - - - - - - - - - + + + + +
  + use-macro="portal/skyn/widgets/ref/macros/objectTitle"/>  - - + + + - - - - - - - - - - - - - - - + +   - +
+ The table header row + + + + The table content + + + +
+
+ + + + + + + + + +
+ + + + This macro displays the widget corresponding to a given field. It requires: + contextObj The Zope object for which this widget must be rendered + page The page where the widget lies + layoutType "edit"? "view"? "cell?" + widget The widget to render + + + + + + + This macro displays the widget corresponding to a group of widgets. + It requires: + contextObj The Zope object for which this widget must be rendered + page The page where the widget lies + layoutType "edit"? "view"? "cell?" + widget The widget to render + + +
+ + + + + + +
+ +
+ + + + + + First row: the tabs. + + Other rows: the widgets. + + + +
+ + + + + + +
+ + + + + +
+
+ + + + + + +
+ +
+
+ + + This macro displays the content of a group of widgets. + It is exclusively called by macro "group" above. + + + Display the title of the group if it is not rendered a fieldset. + + + + + + + The column headers + + + The rows of widgets + + + +
+ + + + +
+
+
+ + + + + + + + +
+ +Displays a field label. + + + + +Displays a field description. + + + + +Displays a field help. + + + + + + +Displays validation-error-related info about a field. + + + + + + + +Displays the fact that a field is required. + diff --git a/gen/plone25/skin/widgets/string.pt b/gen/plone25/skin/widgets/string.pt new file mode 100644 index 0000000..516a0e6 --- /dev/null +++ b/gen/plone25/skin/widgets/string.pt @@ -0,0 +1,102 @@ +View macro for a String. + + +
    +
  • +
+ + + ******** + +
+ + + + +
+ +Edit macro for a String. + + + + + + + + + + + + + + + + + + + +Cell macro for a String. + + + + +Search macro for a String. + +
   + Show a simple search field for most String fields. + + + + Show a multi-selection box for fields whose + validator defines a list of values, with a "AND/OR" checkbox. + + The "and" / "or" radio buttons + + + + +
+
+ The list of values + +

+
diff --git a/gen/plone25/templates/ArchetypesTemplate.py b/gen/plone25/templates/ArchetypesTemplate.py index 70900e0..48beee8 100644 --- a/gen/plone25/templates/ArchetypesTemplate.py +++ b/gen/plone25/templates/ArchetypesTemplate.py @@ -26,7 +26,6 @@ class (): suppl_views = () typeDescription = '' typeDescMsgId = '_edit_descr' - _at_rename_after_creation = True i18nDomain = '' schema = fullSchema wrapperClass = _Wrapper diff --git a/gen/plone25/templates/FlavourTemplate.py b/gen/plone25/templates/FlavourTemplate.py index 648cdf2..3f23ac6 100644 --- a/gen/plone25/templates/FlavourTemplate.py +++ b/gen/plone25/templates/FlavourTemplate.py @@ -6,11 +6,9 @@ import Products..config from appy.gen.plone25.mixins.FlavourMixin import FlavourMixin from Extensions.appyWrappers import -predefinedSchema = Schema(( -),) schema = Schema(( ),) -fullSchema = OrderedBaseFolderSchema.copy() + predefinedSchema.copy() + schema.copy() +fullSchema = OrderedBaseFolderSchema.copy() + schema.copy() class (OrderedBaseFolder, FlavourMixin): '''Configuration flavour class for .''' @@ -32,10 +30,8 @@ class (OrderedBaseFolder, FlavourMixin): schema = fullSchema allMetaTypes = wrapperClass = - _at_rename_after_creation = True for elem in dir(FlavourMixin): if not elem.startswith('__'): security.declarePublic(elem) - registerType(, '') diff --git a/gen/plone25/templates/PodTemplate.py b/gen/plone25/templates/PodTemplate.py index 2b401a8..d173b66 100644 --- a/gen/plone25/templates/PodTemplate.py +++ b/gen/plone25/templates/PodTemplate.py @@ -27,7 +27,6 @@ class PodTemplate(BaseContent, PodTemplateMixin): suppl_views = () typeDescription = "PodTemplate" typeDescMsgId = '_edit_descr' - _at_rename_after_creation = True wrapperClass = schema = fullSchema for elem in dir(PodTemplateMixin): diff --git a/gen/plone25/templates/Portlet.pt b/gen/plone25/templates/Portlet.pt index af3898c..86e9154 100644 --- a/gen/plone25/templates/Portlet.pt +++ b/gen/plone25/templates/Portlet.pt @@ -7,7 +7,7 @@ flavour python: tool.getFlavour(tool);" tal:condition="tool/showPortlet"> - +
(UniqueObject, OrderedBaseFolder, ToolMixin): OrderedBaseFolder.__init__(self, '') self.setTitle('') - registerType(, '') diff --git a/gen/plone25/templates/__init__.py b/gen/plone25/templates/__init__.py index 2a2195b..7274a54 100644 --- a/gen/plone25/templates/__init__.py +++ b/gen/plone25/templates/__init__.py @@ -45,8 +45,9 @@ def initialize(context): # I need to do those imports here; else, types and add permissions will not # be registered. + classes = [] ZopeInstaller(context, PROJECTNAME, Tool.Tool, DEFAULT_ADD_CONTENT_PERMISSION, ADD_CONTENT_PERMISSIONS, - logger, globals()).install() + logger, globals(), classes).install() # ------------------------------------------------------------------------------ diff --git a/gen/plone25/templates/appyWrappers.py b/gen/plone25/templates/appyWrappers.py index 274b556..a7e01f9 100644 --- a/gen/plone25/templates/appyWrappers.py +++ b/gen/plone25/templates/appyWrappers.py @@ -1,6 +1,6 @@ # ------------------------------------------------------------------------------ from appy.gen import * -from appy.gen.plone25.wrappers import AbstractWrapper, FileWrapper +from appy.gen.plone25.wrappers import AbstractWrapper from appy.gen.plone25.wrappers.ToolWrapper import ToolWrapper from appy.gen.plone25.wrappers.FlavourWrapper import FlavourWrapper from appy.gen.plone25.wrappers.PodTemplateWrapper import PodTemplateWrapper diff --git a/gen/plone25/templates/config.py b/gen/plone25/templates/config.py index f026998..dae2f53 100644 --- a/gen/plone25/templates/config.py +++ b/gen/plone25/templates/config.py @@ -1,11 +1,8 @@ -import os, os.path, sys -try: # New CMF - from Products.CMFCore.permissions import setDefaultRoles -except ImportError: # Old CMF - from Products.CMFCore.CMFCorePermissions import setDefaultRoles - -import Extensions.appyWrappers +import os, os.path, sys, copy +import appy.gen +from Products.CMFCore.permissions import setDefaultRoles +import Extensions.appyWrappers as wraps # The following imports are here for allowing mixin classes to access those @@ -17,7 +14,6 @@ from OFS.Image import File from DateTime import DateTime from Products.CMFCore.utils import getToolByName from Products.CMFPlone.PloneBatch import Batch -from Products.Archetypes.utils import DisplayList import logging logger = logging.getLogger('') @@ -32,9 +28,7 @@ setDefaultRoles(DEFAULT_ADD_CONTENT_PERMISSION, tuple(defaultAddRoles)) product_globals = globals() applicationRoles = [] rootClasses = [] -referers = { - -} + # In the following dict, we keep one instance for every Appy workflow defined # in the application. Those prototypical instances will be used for executing # user-defined actions and transitions. For each instance, we add a special @@ -44,6 +38,9 @@ workflowInstances = {} # In the following dict, we store, for every Appy class, the ordered list of -# attributes (included inherited attributes). +# appy types (included inherited ones). attributes = {} +# In the followinf dict, we store, for every Appy class, a dict of appy types +# keyed by their names. +attributesDict = {} # ------------------------------------------------------------------------------ diff --git a/gen/plone25/templates/global_statusmessage.pt b/gen/plone25/templates/global_statusmessage.pt index 5114972..e38289c 100644 --- a/gen/plone25/templates/global_statusmessage.pt +++ b/gen/plone25/templates/global_statusmessage.pt @@ -1,20 +1,5 @@ - - Single message from portal_status_message request key -
- - Messages added via plone_utils - - -
-
-
-
+ diff --git a/gen/plone25/utils.py b/gen/plone25/utils.py index 29a3d4f..a00c550 100644 --- a/gen/plone25/utils.py +++ b/gen/plone25/utils.py @@ -33,11 +33,4 @@ def updateRolesForPermission(permission, roles, obj): existingRoles = perm.getRoles() allRoles = set(existingRoles).union(roles) obj.manage_permission(permission, tuple(allRoles), acquire=0) - -# ------------------------------------------------------------------------------ -from appy.gen.utils import AppyRequest -def getAppyRequest(zopeRequest, obj=None): - '''This method creates a nice (Appy) object representation of a - dictionary-like Zope REQUEST object.''' - return AppyRequest(zopeRequest, obj) # ------------------------------------------------------------------------------ diff --git a/gen/plone25/wrappers/FlavourWrapper.py b/gen/plone25/wrappers/FlavourWrapper.py index f22682c..57a2c09 100644 --- a/gen/plone25/wrappers/FlavourWrapper.py +++ b/gen/plone25/wrappers/FlavourWrapper.py @@ -1,6 +1,8 @@ # ------------------------------------------------------------------------------ -class FlavourWrapper: +from appy.gen.plone25.wrappers import AbstractWrapper +# ------------------------------------------------------------------------------ +class FlavourWrapper(AbstractWrapper): def onEdit(self, created): if created: nbOfFlavours = len(self.tool.flavours) @@ -8,8 +10,7 @@ class FlavourWrapper: self.number = nbOfFlavours self.o.registerPortalTypes() # Call the custom flavour "onEdit" method if it exists - customFlavour = self.__class__.__bases__[1] - if customFlavour.__name__ != 'Flavour': + if len(self.__class__.__bases__) > 1: # There is a custom flavour if customFlavour.__dict__.has_key('onEdit'): customFlavour.__dict__['onEdit'](self, created) diff --git a/gen/plone25/wrappers/PodTemplateWrapper.py b/gen/plone25/wrappers/PodTemplateWrapper.py index 506ea7e..97a7e1a 100644 --- a/gen/plone25/wrappers/PodTemplateWrapper.py +++ b/gen/plone25/wrappers/PodTemplateWrapper.py @@ -1,3 +1,6 @@ # ------------------------------------------------------------------------------ -class PodTemplateWrapper: pass +from appy.gen.plone25.wrappers import AbstractWrapper + +# ------------------------------------------------------------------------------ +class PodTemplateWrapper(AbstractWrapper): pass # ------------------------------------------------------------------------------ diff --git a/gen/plone25/wrappers/ToolWrapper.py b/gen/plone25/wrappers/ToolWrapper.py index f1ee015..c471d2c 100644 --- a/gen/plone25/wrappers/ToolWrapper.py +++ b/gen/plone25/wrappers/ToolWrapper.py @@ -1,5 +1,32 @@ # ------------------------------------------------------------------------------ -class ToolWrapper: +from appy.gen.plone25.wrappers import AbstractWrapper + +# ------------------------------------------------------------------------------ +_PY = 'Please specify a file corresponding to a Python interpreter ' \ + '(ie "/usr/bin/python").' +FILE_NOT_FOUND = 'Path "%s" was not found.' +VALUE_NOT_FILE = 'Path "%s" is not a file. ' + _PY +NO_PYTHON = "Name '%s' does not starts with 'python'. " + _PY +NOT_UNO_ENABLED_PYTHON = '"%s" is not a UNO-enabled Python interpreter. ' \ + 'To check if a Python interpreter is UNO-enabled, ' \ + 'launch it and type "import uno". If you have no ' \ + 'ImportError exception it is ok.' + +# ------------------------------------------------------------------------------ +class ToolWrapper(AbstractWrapper): + def validPythonWithUno(self, value): + '''This method represents the validator for field unoEnabledPython.''' + if value: + if not os.path.exists(value): + return FILE_NOT_FOUND % value + if not os.path.isfile(value): + return VALUE_NOT_FILE % value + if not os.path.basename(value).startswith('python'): + return NO_PYTHON % value + if os.system('%s -c "import uno"' % value): + return NOT_UNO_ENABLED_PYTHON % value + return None + def getInitiator(self): '''Retrieves the object that triggered the creation of the object being currently created (if any).''' diff --git a/gen/plone25/wrappers/__init__.py b/gen/plone25/wrappers/__init__.py index 598cf98..a1bce0a 100644 --- a/gen/plone25/wrappers/__init__.py +++ b/gen/plone25/wrappers/__init__.py @@ -5,7 +5,7 @@ import os, os.path, time, mimetypes, random import appy.pod from appy.gen import Search -from appy.gen.utils import sequenceTypes +from appy.gen.utils import sequenceTypes, FileWrapper from appy.shared.utils import getOsTempFolder, executeCommand, normalizeString from appy.shared.xml_parser import XmlMarshaller @@ -32,9 +32,9 @@ class AbstractWrapper: v MIME type of the file.''' ploneFileClass = self.o.getProductConfig().File if isinstance(v, ploneFileClass): - exec "self.o.set%s%s(v)" % (name[0].upper(), name[1:]) + setattr(self.o, name, v) elif isinstance(v, FileWrapper): - setattr(self, name, v._atFile) + setattr(self.o, name, v._atFile) elif isinstance(v, basestring): f = file(v) fileName = os.path.basename(v) @@ -42,7 +42,7 @@ class AbstractWrapper: ploneFile = ploneFileClass(fileId, fileName, f) ploneFile.filename = fileName ploneFile.content_type = mimetypes.guess_type(fileName)[0] - setattr(self, name, ploneFile) + setattr(self.o, name, ploneFile) f.close() elif type(v) in sequenceTypes: # It should be a 2-tuple or 3-tuple @@ -61,15 +61,20 @@ class AbstractWrapper: if not mimeType: mimeType = mimetypes.guess_type(fileName)[0] ploneFile.content_type = mimeType - setattr(self, name, ploneFile) + setattr(self.o, name, ploneFile) def __setattr__(self, name, v): + if name == 'title': + self.o.setTitle(v) + return appyType = self.o.getAppyType(name) - if not appyType and (name != 'title'): + if not appyType: raise 'Attribute "%s" does not exist.' % name - if appyType and (appyType['type'] == 'File'): + if appyType.type == 'File': self._set_file_attribute(name, v) + elif appyType.type == 'Ref': + raise "Use methods 'link' or 'create' to modify references." else: - exec "self.o.set%s%s(v)" % (name[0].upper(), name[1:]) + setattr(self.o, name, v) def __repr__(self): return '<%s wrapper at %s>' % (self.klass.__name__, id(self)) def __cmp__(self, other): @@ -94,17 +99,18 @@ class AbstractWrapper: appName = self.o.getProductConfig().PROJECTNAME return self.o.utranslate(self.o.getWorkflowLabel(), domain=appName) stateLabel = property(get_stateLabel) - def get_klass(self): return self.__class__.__bases__[1] + def get_klass(self): return self.__class__.__bases__[-1] klass = property(get_klass) - def get_url(self): return self.o.absolute_url()+'/skyn/view' + def get_url(self): return self.o.absolute_url() url = property(get_url) def get_history(self): key = self.o.workflow_history.keys()[0] return self.o.workflow_history[key] history = property(get_history) - def get_user(self): - return self.o.portal_membership.getAuthenticatedMember() + def get_user(self): return self.o.portal_membership.getAuthenticatedMember() user = property(get_user) + def get_fields(self): return self.o.getAllAppyTypes() + fields = property(get_fields) def link(self, fieldName, obj): '''This method links p_obj to this one through reference field @@ -178,7 +184,6 @@ class AbstractWrapper: appyObj = ploneObj.appy() # Set object attributes for attrName, attrValue in kwargs.iteritems(): - setterName = 'set%s%s' % (attrName[0].upper(), attrName[1:]) if isinstance(attrValue, AbstractWrapper): try: refAppyType = getattr(appyObj.__class__.__bases__[-1], @@ -187,7 +192,7 @@ class AbstractWrapper: except AttributeError, ae: pass else: - getattr(ploneObj, setterName)(attrValue) + setattr(appyObj, attrName, attrValue) if isField: # Link the object to this one self.link(fieldName, ploneObj) @@ -375,85 +380,4 @@ class AbstractWrapper: p_data must be a dictionary whose keys are field names (strings) and whose values are the previous field values.''' self.o.addDataChange(data, labels=False) - -# ------------------------------------------------------------------------------ -CONVERSION_ERROR = 'An error occurred while executing command "%s". %s' -class FileWrapper: - '''When you get, from an appy object, the value of a File attribute, you - get an instance of this class.''' - def __init__(self, atFile): - '''This constructor is only used by Appy to create a nice File instance - from a Plone/Zope corresponding instance (p_atFile). If you need to - create a new file and assign it to a File attribute, use the - attribute setter, do not create yourself an instance of this - class.''' - d = self.__dict__ - d['_atFile'] = atFile # Not for you! - d['name'] = atFile.filename - d['content'] = atFile.data - d['mimeType'] = atFile.content_type - d['size'] = atFile.size # In bytes - - def __setattr__(self, name, v): - d = self.__dict__ - if name == 'name': - self._atFile.filename = v - d['name'] = v - elif name == 'content': - self._atFile.update_data(v, self.mimeType, len(v)) - d['content'] = v - d['size'] = len(v) - elif name == 'mimeType': - self._atFile.content_type = self.mimeType = v - else: - raise 'Impossible to set attribute %s. "Settable" attributes ' \ - 'are "name", "content" and "mimeType".' % name - - def dump(self, filePath=None, format=None, tool=None): - '''Writes the file on disk. If p_filePath is specified, it is the - path name where the file will be dumped; folders mentioned in it - must exist. If not, the file will be dumped in the OS temp folder. - The absolute path name of the dumped file is returned. - If an error occurs, the method returns None. If p_format is - specified, OpenOffice will be called for converting the dumped file - to the desired format. In this case, p_tool, a Appy tool, must be - provided. Indeed, any Appy tool contains parameters for contacting - OpenOffice in server mode.''' - if not filePath: - filePath = '%s/file%f.%s' % (getOsTempFolder(), time.time(), - normalizeString(self.name)) - f = file(filePath, 'w') - if self.content.__class__.__name__ == 'Pdata': - # The file content is splitted in several chunks. - f.write(self.content.data) - nextPart = self.content.next - while nextPart: - f.write(nextPart.data) - nextPart = nextPart.next - else: - # Only one chunk - f.write(self.content) - f.close() - if format: - if not tool: return - # Convert the dumped file using OpenOffice - convScript = '%s/converter.py' % os.path.dirname(appy.pod.__file__) - cmd = '%s %s "%s" %s -p%d' % (tool.unoEnabledPython, convScript, - filePath, format, tool.openOfficePort) - errorMessage = executeCommand(cmd) - # Even if we have an "error" message, it could be a simple warning. - # So we will continue here and, as a subsequent check for knowing if - # an error occurred or not, we will test the existence of the - # converted file (see below). - os.remove(filePath) - # Return the name of the converted file. - baseName, ext = os.path.splitext(filePath) - if (ext == '.%s' % format): - filePath = '%s.res.%s' % (baseName, format) - else: - filePath = '%s.%s' % (baseName, format) - if not os.path.exists(filePath): - tool.log(CONVERSION_ERROR % (cmd, errorMessage), type='error') - return - return filePath # ------------------------------------------------------------------------------ diff --git a/gen/plone3/installer.py b/gen/plone3/installer.py index 3f76b7f..e511706 100644 --- a/gen/plone3/installer.py +++ b/gen/plone3/installer.py @@ -4,35 +4,7 @@ # ------------------------------------------------------------------------------ from appy.gen.plone25.installer import PloneInstaller as Plone25Installer -class ZCTextIndexInfo: - '''Silly class used for storing information about a ZCTextIndex.''' - lexicon_id = "plone_lexicon" - index_type = 'Okapi BM25 Rank' - class PloneInstaller(Plone25Installer): '''This Plone installer runs every time the generated Plone product is - installed or uninstalled (in the Plone configuration interface).''' - @staticmethod - def updateIndexes(ploneSite, indexInfo, logger): - '''This method creates or updates, in a p_ploneSite, definitions of - indexes in its portal_catalog, based on index-related information - given in p_indexInfo. p_indexInfo is a dictionary of the form - {s_indexName:s_indexType}. Here are some examples of index types: - "FieldIndex", "ZCTextIndex", "DateIndex".''' - catalog = ploneSite.portal_catalog - indexNames = catalog.indexes() - for indexName, indexType in indexInfo.iteritems(): - if indexName not in indexNames: - # We need to create this index - if indexType != 'ZCTextIndex': - catalog.addIndex(indexName, indexType) - else: - catalog.addIndex(indexName,indexType,extra=ZCTextIndexInfo) - logger.info('Creating index "%s" of type "%s"...' % \ - (indexName, indexType)) - # Indexing database content based on this index. - catalog.reindexIndex(indexName, ploneSite.REQUEST) - logger.info('Done.') - # TODO: if the index already exists but has not the same type, we - # re-create it with the same type and we reindex it. + installed or uninstalled (in the Plone configuration panel).''' # ------------------------------------------------------------------------------ diff --git a/gen/po.py b/gen/po.py index 959e1ae..42209dd 100644 --- a/gen/po.py +++ b/gen/po.py @@ -69,6 +69,7 @@ class PoMessage: SEARCH_AND = 'and' WORKFLOW_COMMENT = 'Optional comment' WORKFLOW_STATE = 'state' + APPY_TITLE = 'Title' DATA_CHANGE = 'Data change' MODIFIED_FIELD = 'Modified field' PREVIOUS_VALUE = 'Previous value' @@ -78,12 +79,13 @@ class PoMessage: CHOOSE_A_DOC = '[ Documents ]' MIN_REF_VIOLATED = 'You must choose more elements here.' MAX_REF_VIOLATED = 'Too much elements are selected here.' - BAD_INT = 'An integer value is expected; do not enter any space.' + BAD_LONG = 'An integer value is expected; do not enter any space.' BAD_FLOAT = 'A floating-point number is expected; use the dot as decimal ' \ 'separator, not a comma; do not enter any space.' BAD_EMAIL = 'Please enter a valid email.' BAD_URL = 'Please enter a valid URL.' BAD_ALPHANUMERIC = 'Please enter a valid alphanumeric value.' + BAD_SELECT_VALUE = 'The value is not among possible values for this field.' ACTION_OK = 'The action has been successfully executed.' ACTION_KO = 'A problem occurred while executing the action.' FRONT_PAGE_TEXT = 'Welcome to this Appy-powered Plone site.' @@ -103,11 +105,16 @@ class PoMessage: CONFIRM = 'Are you sure ?' YES = 'Yes' NO = 'No' + FIELD_REQUIRED = 'Please fill this field.' + FILE_REQUIRED = 'Please select a file.' + IMAGE_REQUIRED = 'The uploaded file must be an image.' - def __init__(self, id, msg, default, fuzzy=False, comments=[]): + def __init__(self, id, msg, default, fuzzy=False, comments=[], + niceDefault=False): self.id = id self.msg = msg self.default = default + if niceDefault: self.produceNiceDefault() self.fuzzy = fuzzy # True if the default value has changed in the pot # file: the msg in the po file needs to be translated again. self.comments = comments diff --git a/gen/utils.py b/gen/utils.py index f34bb47..ba0a744 100644 --- a/gen/utils.py +++ b/gen/utils.py @@ -1,6 +1,6 @@ # ------------------------------------------------------------------------------ -import re - +import re, os, os.path, time +from appy.shared.utils import getOsTempFolder, normalizeString sequenceTypes = (list, tuple) # Classes used by edit/view templates for accessing information ---------------- @@ -8,111 +8,100 @@ class Descr: '''Abstract class for description classes.''' def get(self): return self.__dict__ -class FieldDescr(Descr): - def __init__(self, atField, appyType, fieldRel): - # The corresponding Archetypes field (may be None in the case of - # backward references) - self.atField = atField - # The corresponding Appy type - self.appyType = appyType - # The field relationship, needed when the field description is a - # backward reference. - self.fieldRel = fieldRel - # Can we sort this field ? - at = self.appyType - self.sortable = False - if not fieldRel and ((self.atField.getName() == 'title') or \ - (at['indexed'])): - self.sortable = True - # Can we filter this field? - self.filterable = False - if not fieldRel and at['indexed'] and (at['type'] == 'String') and \ - (at['format'] == 0) and not at['isSelect']: - self.filterable = True - if fieldRel: - self.widgetType = 'backField' - self.group = appyType['backd']['group'] - self.show = appyType['backd']['show'] - self.page = appyType['backd']['page'] - else: - self.widgetType = 'field' - self.group = appyType['group'] - self.show = appyType['show'] - self.page = appyType['page'] - fieldName = self.atField.getName() - class GroupDescr(Descr): - def __init__(self, name, cols, page): - self.name = name - self.cols = cols # The nb of columns for placing fields into the group - self.rows = None # The number of rows + def __init__(self, group, page, metaType): + '''Creates the data structure manipulated in ZPTs from p_group, the + Group instance used in the field definition.''' + self.type = 'group' + # All p_group attributes become self attributes. + for name, value in group.__dict__.iteritems(): + if not name.startswith('_'): + setattr(self, name, value) + self.columnsWidths = [col.width for col in group.columns] + self.columnsAligns = [col.align for col in group.columns] + # Names of i18n labels + self.labelId = '%s_group_%s' % (metaType, self.name) + self.descrId = self.labelId + '_descr' + self.helpId = self.labelId + '_help' + # The name of the page where the group lies self.page = page - self.fields = [] - self.widgetType = 'group' + # The widgets belonging to the group that the current user may see. + # They will be stored by m_addWidget below as a list of lists because + # they will be rendered as a table. + self.widgets = [[]] - def computeRows(groupDict): - '''Computes self.rows. But because at this time the object has already - been converted to a dict (for being maniputated within ZPTs, this - method is a static method that takes the dict as arg.''' - groupDict['rows'] = len(groupDict['fields']) / groupDict['cols'] - if len(groupDict['fields']) % groupDict['cols']: - groupDict['rows'] += 1 - computeRows = staticmethod(computeRows) + @staticmethod + def addWidget(groupDict, newWidget): + '''Adds p_newWidget into p_groupDict['widgets']. We try first to add + p_newWidget into the last widget row. If it is not possible, we + create a new row. - def getGroupInfo(groupName): - '''In the group name, the user may optionally specify at the end the - number of columns for placing fields into the group. This method - returns the real group name and the number of columns.''' - res = groupName.rsplit('_', 1) - if len(res) == 1: - res.append(1) # Append the default numer of columns + This method is a static method taking p_groupDict as first param + instead of being an instance method because at this time the object + has already been converted to a dict (for being maniputated within + ZPTs).''' + # Get the last row + widgetRow = groupDict['widgets'][-1] + numberOfColumns = len(groupDict['columnsWidths']) + # Computes the number of columns already filled by widgetRow + rowColumns = 0 + for widget in widgetRow: rowColumns += widget['colspan'] + freeColumns = numberOfColumns - rowColumns + if freeColumns >= newWidget['colspan']: + # We can add the widget in the last row. + widgetRow.append(newWidget) else: - try: - res[1] = int(res[1]) - except ValueError: - res[1] = 1 - return res - getGroupInfo = staticmethod(getGroupInfo) + if freeColumns: + # Terminate the current row by appending empty cells + for i in range(freeColumns): widgetRow.append('') + # Create a new row + newRow = [newWidget] + groupDict['widgets'].append(newRow) class PageDescr(Descr): - def getPageInfo(pageOrName, pageKlass): + @staticmethod + def getPageInfo(pageOrName): '''pageOrName can be: - a string containing the name of the page - a string containing _ - a appy.gen.Page instance for a more detailed page description. This method returns a normalized tuple containing page-related information.''' - if isinstance(pageOrName, pageKlass): - res = [pageOrName.name, pageOrName.phase, pageOrName.show] - else: + if isinstance(pageOrName, basestring): res = pageOrName.rsplit('_', 1) if len(res) == 1: res.append('main') res.append(True) + else: + res = [pageOrName.name, pageOrName.phase, pageOrName.show] return res - getPageInfo = staticmethod(getPageInfo) class PhaseDescr(Descr): - def __init__(self, name, states, forPlone, ploneObj): + def __init__(self, name, states, obj): self.name = name self.states = states - self.forPlone = forPlone - self.ploneObj = ploneObj + self.obj = obj self.phaseStatus = None self.pages = [] # The list of pages in this phase self.totalNbOfPhases = None + # The following attributes allows to browse, from a given page, to the + # last page of the previous phase and to the first page of the following + # phase if allowed by phase state. + self.previousPhase = None + self.nextPhase = None + def addPage(self, appyType, obj): - toAdd = appyType['page'] - if (toAdd == 'main') and self.forPlone: - toAdd = 'default' + toAdd = appyType.page if (toAdd not in self.pages) and \ - obj._appy_showPage(appyType['page'], appyType['pageShow']): + obj._appy_showPage(appyType.page, appyType.pageShow): self.pages.append(toAdd) - def computeStatus(self): + + def computeStatus(self, allPhases): '''Compute status of whole phase based on individual status of states in this phase. If this phase includes no state, the concept of phase is simply used as a tab, and its status depends on the page currently - shown.''' + shown. This method also fills fields "previousPhase" and "nextPhase" + if relevant, based on list of p_allPhases.''' res = 'Current' if self.states: # Compute status base on states @@ -124,17 +113,19 @@ class PhaseDescr(Descr): break else: # Compute status based on current page - rq = self.ploneObj.REQUEST - if rq.has_key('fieldset'): - pageName = rq['fieldset'] - if not self.forPlone and (pageName == 'default'): - pageName = 'main' - else: - pageName = rq.get('pageName', 'main') - if pageName in self.pages: + page = self.obj.REQUEST.get('page', 'main') + if page in self.pages: res = 'Current' else: res = 'Deselected' + # Identify previous and next phases + for phaseInfo in allPhases: + if phaseInfo['name'] == self.name: + i = allPhases.index(phaseInfo) + if i > 0: + self.previousPhase = allPhases[i-1] + if i < (len(allPhases)-1): + self.nextPhase = allPhases[i+1] self.phaseStatus = res class StateDescr(Descr): @@ -159,32 +150,7 @@ def produceNiceMessage(msg): return res # ------------------------------------------------------------------------------ -class ValidationErrors: pass -class AppyRequest: - def __init__(self, zopeRequest, appyObj=None): - self.zopeRequest = zopeRequest - self.appyObj = appyObj - def __str__(self): return '' - def __repr__(self): return '' - def __getattr__(self, attr): - res = None - if self.appyObj: - # I can retrieve type information from the ploneObj. - appyType = self.appyObj.o.getAppyType(attr) - if appyType['type'] == 'Ref': - res = self.zopeRequest.get('appy_ref_%s' % attr, None) - else: - res = self.zopeRequest.get(attr, None) - if appyType['pythonType']: - try: - exec 'res = %s' % res # bool('False') gives True, so we - # can't write: res = appyType['pythonType'](res) - except SyntaxError, se: - # Can happen when for example, an Integer value is empty - res = None - else: - res = self.zopeRequest.get(attr, None) - return res +class AppyObject: pass # ------------------------------------------------------------------------------ class SomeObjects: @@ -261,4 +227,85 @@ class FakeBrain: def pretty_title_or_id(self): return self.Title def getObject(self, REQUEST=None): return self def getRID(self): return self.url + +# ------------------------------------------------------------------------------ +CONVERSION_ERROR = 'An error occurred while executing command "%s". %s' +class FileWrapper: + '''When you get, from an appy object, the value of a File attribute, you + get an instance of this class.''' + def __init__(self, atFile): + '''This constructor is only used by Appy to create a nice File instance + from a Plone/Zope corresponding instance (p_atFile). If you need to + create a new file and assign it to a File attribute, use the + attribute setter, do not create yourself an instance of this + class.''' + d = self.__dict__ + d['_atFile'] = atFile # Not for you! + d['name'] = atFile.filename + d['content'] = atFile.data + d['mimeType'] = atFile.content_type + d['size'] = atFile.size # In bytes + + def __setattr__(self, name, v): + d = self.__dict__ + if name == 'name': + self._atFile.filename = v + d['name'] = v + elif name == 'content': + self._atFile.update_data(v, self.mimeType, len(v)) + d['content'] = v + d['size'] = len(v) + elif name == 'mimeType': + self._atFile.content_type = self.mimeType = v + else: + raise 'Impossible to set attribute %s. "Settable" attributes ' \ + 'are "name", "content" and "mimeType".' % name + + def dump(self, filePath=None, format=None, tool=None): + '''Writes the file on disk. If p_filePath is specified, it is the + path name where the file will be dumped; folders mentioned in it + must exist. If not, the file will be dumped in the OS temp folder. + The absolute path name of the dumped file is returned. + If an error occurs, the method returns None. If p_format is + specified, OpenOffice will be called for converting the dumped file + to the desired format. In this case, p_tool, a Appy tool, must be + provided. Indeed, any Appy tool contains parameters for contacting + OpenOffice in server mode.''' + if not filePath: + filePath = '%s/file%f.%s' % (getOsTempFolder(), time.time(), + normalizeString(self.name)) + f = file(filePath, 'w') + if self.content.__class__.__name__ == 'Pdata': + # The file content is splitted in several chunks. + f.write(self.content.data) + nextPart = self.content.next + while nextPart: + f.write(nextPart.data) + nextPart = nextPart.next + else: + # Only one chunk + f.write(self.content) + f.close() + if format: + if not tool: return + # Convert the dumped file using OpenOffice + convScript = '%s/converter.py' % os.path.dirname(appy.pod.__file__) + cmd = '%s %s "%s" %s -p%d' % (tool.unoEnabledPython, convScript, + filePath, format, tool.openOfficePort) + errorMessage = executeCommand(cmd) + # Even if we have an "error" message, it could be a simple warning. + # So we will continue here and, as a subsequent check for knowing if + # an error occurred or not, we will test the existence of the + # converted file (see below). + os.remove(filePath) + # Return the name of the converted file. + baseName, ext = os.path.splitext(filePath) + if (ext == '.%s' % format): + filePath = '%s.res.%s' % (baseName, format) + else: + filePath = '%s.%s' % (baseName, format) + if not os.path.exists(filePath): + tool.log(CONVERSION_ERROR % (cmd, errorMessage), type='error') + return + return filePath # ------------------------------------------------------------------------------ diff --git a/pod/buffers.py b/pod/buffers.py index ab3ba23..16a77c1 100644 --- a/pod/buffers.py +++ b/pod/buffers.py @@ -23,6 +23,7 @@ from appy.pod import PodError, XML_SPECIAL_CHARS from appy.pod.elements import * from appy.pod.actions import IfAction, ElseAction, ForAction, VariableAction, \ NullAction +from appy.shared import xmlPrologue # ------------------------------------------------------------------------------ class ParsingError(Exception): pass @@ -158,7 +159,7 @@ class FileBuffer(Buffer): Buffer.__init__(self, env, None) self.result = result self.content = file(result, 'w') - self.content.write('') + self.content.write(xmlPrologue) def getLength(self): return 0 # getLength is used to manage insertions into sub-buffers. But in the case # of a FileBuffer, we will only have 1 sub-buffer at a time, and we don't diff --git a/pod/doc_importers.py b/pod/doc_importers.py index 631d96e..155bdb1 100644 --- a/pod/doc_importers.py +++ b/pod/doc_importers.py @@ -45,6 +45,10 @@ class DocImporter: self.svgNs = ns[OdfEnvironment.NS_SVG] self.tempFolder = tempFolder self.importFolder = self.getImportFolder() + # If the importer generates one or several images, we will retain their + # names here, because we will need to declare them in + # META-INF/manifest.xml + self.fileNames = [] if self.at: # Check that the file exists if not os.path.isfile(self.at): @@ -142,6 +146,7 @@ class PdfImporter(DocImporter): self.tempFolder, self.ns) imgImporter.setAnchor('paragraph') self.res += imgImporter.run() + self.fileNames += imgImporter.fileNames os.remove(nextImage) else: noMoreImages = True @@ -214,6 +219,7 @@ class ImageImporter(DocImporter): # Compute path to image i = self.importPath.rfind('/Pictures/') imagePath = self.importPath[i+1:] + self.fileNames.append(imagePath) # Compute image size width, height = getSize(self.importPath, self.format) if width != None: diff --git a/pod/renderer.py b/pod/renderer.py index 900995a..cd28aba 100644 --- a/pod/renderer.py +++ b/pod/renderer.py @@ -17,7 +17,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,USA. # ------------------------------------------------------------------------------ -import zipfile, shutil, xml.sax, os, os.path, re +import zipfile, shutil, xml.sax, os, os.path, re, mimetypes, time from UserDict import UserDict @@ -134,33 +134,45 @@ class Renderer: self.stylesManager = None # Manages the styles defined into the ODT # template self.tempFolder = None - self.curdir = os.getcwd() self.env = None self.pyPath = pythonWithUnoPath self.ooPort = ooPort self.forceOoCall = forceOoCall self.finalizeFunction = finalizeFunction + # Retain potential files or images that will be included through + # "do ... from document" statements: we will need to declare them in + # META-INF/manifest.xml. + self.fileNames = [] self.prepareFolders() # Unzip template self.unzipFolder = os.path.join(self.tempFolder, 'unzip') os.mkdir(self.unzipFolder) for zippedFile in self.templateZip.namelist(): - fileName = os.path.basename(zippedFile) - folderName = os.path.dirname(zippedFile) - # Create folder if needed - fullFolderName = self.unzipFolder - if folderName: - fullFolderName = os.path.join(fullFolderName, folderName) - if not os.path.exists(fullFolderName): - os.makedirs(fullFolderName) - # Unzip file + # Before writing the zippedFile into self.unzipFolder, create the + # intermediary subfolder(s) if needed. + fileName = None + if zippedFile.endswith('/') or zippedFile.endswith(os.sep): + # This is an empty folder. Create it nevertheless. + os.makedirs(os.path.join(self.unzipFolder, zippedFile)) + else: + fileName = os.path.basename(zippedFile) + folderName = os.path.dirname(zippedFile) + fullFolderName = self.unzipFolder + if folderName: + fullFolderName = os.path.join(fullFolderName, folderName) + if not os.path.exists(fullFolderName): + os.makedirs(fullFolderName) + # Unzip the file in self.unzipFolder if fileName: fullFileName = os.path.join(fullFolderName, fileName) f = open(fullFileName, 'wb') fileContent = self.templateZip.read(zippedFile) - if fileName == 'content.xml': + if (fileName == 'content.xml') and not folderName: + # content.xml files may reside in subfolders. + # We modify only the one in the root folder. self.contentXml = fileContent - elif fileName == 'styles.xml': + elif (fileName == 'styles.xml') and not folderName: + # Same remark as above. self.stylesManager = StylesManager(fileContent) self.stylesXml = fileContent f.write(fileContent) @@ -268,7 +280,10 @@ class Renderer: imp = importer(content, at, format, self.tempFolder, ns) if isImage: imp.setAnchor(anchor) - return imp.run() + res = imp.run() + if imp.fileNames: + self.fileNames += imp.fileNames + return res def prepareFolders(self): # Check if I can write the result @@ -293,6 +308,27 @@ class Renderer: except OSError, oe: raise PodError(CANT_WRITE_TEMP_FOLDER % (self.result, oe)) + def patchManifest(self): + '''Declares, in META-INF/manifest.xml, images or files included via the + "do... from document" statements if any.''' + if self.fileNames: + j = os.path.join + toInsert = '' + for fileName in self.fileNames: + mimeType = mimetypes.guess_type(fileName)[0] + toInsert += ' \n' % (mimeType, fileName) + manifestName = j(self.unzipFolder, j('META-INF', 'manifest.xml')) + f = file(manifestName) + manifestContent = f.read() + hook = '' + manifestContent = manifestContent.replace(hook, toInsert+hook) + f.close() + # Write the new manifest content + f = file(manifestName, 'w') + f.write(manifestContent) + f.close() + # Public interface def run(self): '''Renders the result.''' @@ -303,6 +339,8 @@ class Renderer: self.currentParser = self.stylesParser # Create the resulting styles.xml self.currentParser.parse(self.stylesXml) + # Patch META-INF/manifest.xml + self.patchManifest() # Re-zip the result self.finalize() @@ -397,11 +435,18 @@ class Renderer: resultOdt = zipfile.ZipFile(resultOdtName,'w', zipfile.ZIP_DEFLATED) except RuntimeError: resultOdt = zipfile.ZipFile(resultOdtName,'w') - os.chdir(self.unzipFolder) - for dir, dirnames, filenames in os.walk('.'): + for dir, dirnames, filenames in os.walk(self.unzipFolder): for f in filenames: - resultOdt.write(os.path.join(dir, f)[2:]) - # [2:] is there to avoid havin './' in the path in the zip file. + folderName = dir[len(self.unzipFolder)+1:] + resultOdt.write(os.path.join(dir, f), + os.path.join(folderName, f)) + if not dirnames and not filenames: + # This is an empty leaf folder. We must create an entry in the + # zip for him + folderName = dir[len(self.unzipFolder):] + zInfo = zipfile.ZipInfo("%s/" % folderName,time.localtime()[:6]) + zInfo.external_attr = 48 + resultOdt.writestr(zInfo, '') resultOdt.close() resultType = os.path.splitext(self.result)[1] try: @@ -431,6 +476,5 @@ class Renderer: raise PodError(CONVERT_ERROR % output) os.rename(resultName, self.result) finally: - os.chdir(self.curdir) FolderDeleter.delete(self.tempFolder) # ------------------------------------------------------------------------------ diff --git a/pod/test/Tests.rtf b/pod/test/Tests.rtf index 46bb049..bc46b87 100644 --- a/pod/test/Tests.rtf +++ b/pod/test/Tests.rtf @@ -34,18 +34,18 @@ {\s31\sb240\sa120\keepn\rtlch\af4\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f4\fs28\lang1033\loch\f4\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111;} {\s32\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext32 WW-caption1111111;} {\s33\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext33 WW-Index1111111;} -{\s34\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111;} -{\s35\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext35 WW-caption11111111;} -{\s36\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext36 WW-Index11111111;} -{\s37\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111;} -{\s38\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext38 WW-caption111111111;} -{\s39\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext39 WW-Index111111111;} -{\s40\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111;} -{\s41\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext41 WW-caption1111111111;} -{\s42\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext42 WW-Index1111111111;} -{\s43\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111;} -{\s44\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext44 WW-caption11111111111;} -{\s45\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext45 WW-Index11111111111;} +{\s34\sb240\sa120\keepn\rtlch\af4\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f4\fs28\lang1033\loch\f4\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111;} +{\s35\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext35 WW-caption11111111;} +{\s36\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext36 WW-Index11111111;} +{\s37\sb240\sa120\keepn\rtlch\af4\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f4\fs28\lang1033\loch\f4\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111;} +{\s38\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext38 WW-caption111111111;} +{\s39\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext39 WW-Index111111111;} +{\s40\sb240\sa120\keepn\rtlch\af4\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f4\fs28\lang1033\loch\f4\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111;} +{\s41\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext41 WW-caption1111111111;} +{\s42\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext42 WW-Index1111111111;} +{\s43\sb240\sa120\keepn\rtlch\af4\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f4\fs28\lang1033\loch\f4\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111;} +{\s44\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext44 WW-caption11111111111;} +{\s45\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext45 WW-Index11111111111;} {\s46\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111;} {\s47\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext47 WW-caption111111111111;} {\s48\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext48 WW-Index111111111111;} @@ -67,18 +67,18 @@ {\s64\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111;} {\s65\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext65 WW-caption111111111111111111;} {\s66\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext66 WW-Index111111111111111111;} -{\s67\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111;} -{\s68\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext68 WW-caption1111111111111111111;} -{\s69\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext69 WW-Index1111111111111111111;} -{\s70\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111;} -{\s71\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext71 WW-caption11111111111111111111;} -{\s72\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext72 WW-Index11111111111111111111;} -{\s73\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111;} -{\s74\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext74 WW-caption111111111111111111111;} -{\s75\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext75 WW-Index111111111111111111111;} -{\s76\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111;} -{\s77\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext77 WW-caption1111111111111111111111;} -{\s78\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext78 WW-Index1111111111111111111111;} +{\s67\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111;} +{\s68\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext68 WW-caption1111111111111111111;} +{\s69\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext69 WW-Index1111111111111111111;} +{\s70\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111;} +{\s71\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext71 WW-caption11111111111111111111;} +{\s72\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext72 WW-Index11111111111111111111;} +{\s73\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111;} +{\s74\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext74 WW-caption111111111111111111111;} +{\s75\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext75 WW-Index111111111111111111111;} +{\s76\sb240\sa120\keepn\rtlch\af5\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f5\fs28\lang1033\loch\f5\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111;} +{\s77\sb120\sa120\rtlch\af5\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f5\fs24\lang1033\i\loch\f5\fs24\lang1033\i\sbasedon1\snext77 WW-caption1111111111111111111111;} +{\s78\rtlch\af5\afs16\lang255\ltrch\dbch\langfe1033\hich\f5\fs16\lang1033\loch\f5\fs16\lang1033\sbasedon1\snext78 WW-Index1111111111111111111111;} {\s79\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111;} {\s80\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext80 WW-caption11111111111111111111111;} {\s81\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext81 WW-Index11111111111111111111111;} @@ -145,47 +145,47 @@ {\s142\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111;} {\s143\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext143 WW-caption11111111111111111111111111111111111111111111;} {\s144\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext144 WW-Index11111111111111111111111111111111111111111111;} -{\s145\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111;} -{\s146\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext146 WW-caption111111111111111111111111111111111111111111111;} -{\s147\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext147 WW-Index111111111111111111111111111111111111111111111;} -{\s148\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext148 WW-caption1111111111111111111111111111111111111111111111;} -{\s149\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext149 WW-caption11111111111111111111111111111111111111111111111;} -{\s150\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext150 WW-caption111111111111111111111111111111111111111111111111;} -{\s151\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext151 WW-caption1111111111111111111111111111111111111111111111111;} -{\s152\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext152 WW-caption11111111111111111111111111111111111111111111111111;} -{\s153\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext153 WW-caption111111111111111111111111111111111111111111111111111;} -{\s154\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext154 WW-caption1111111111111111111111111111111111111111111111111111;} -{\s155\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext155 WW-caption11111111111111111111111111111111111111111111111111111;} -{\s156\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext156 WW-caption111111111111111111111111111111111111111111111111111111;} -{\s157\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext157 WW-caption1111111111111111111111111111111111111111111111111111111;} -{\s158\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext158 WW-caption11111111111111111111111111111111111111111111111111111111;} -{\s159\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext159 WW-caption111111111111111111111111111111111111111111111111111111111;} -{\s160\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext160 WW-caption1111111111111111111111111111111111111111111111111111111111;} -{\s161\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext161 WW-caption11111111111111111111111111111111111111111111111111111111111;} -{\s162\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111;} -{\s163\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext163 WW-caption111111111111111111111111111111111111111111111111111111111111;} -{\s164\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext164 WW-Index1111111111111111111111111111111111111111111111;} -{\s165\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111111;} -{\s166\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext166 WW-caption1111111111111111111111111111111111111111111111111111111111111;} -{\s167\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext167 WW-Index11111111111111111111111111111111111111111111111;} -{\s168\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111111;} -{\s169\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext169 WW-caption11111111111111111111111111111111111111111111111111111111111111;} -{\s170\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext170 WW-Index111111111111111111111111111111111111111111111111;} -{\s171\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext171 WW-caption111111111111111111111111111111111111111111111111111111111111111;} -{\s172\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext172 WW-caption1111111111111111111111111111111111111111111111111111111111111111;} -{\s173\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext173 WW-caption11111111111111111111111111111111111111111111111111111111111111111;} -{\s174\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111111;} -{\s175\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext175 WW-caption111111111111111111111111111111111111111111111111111111111111111111;} -{\s176\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext176 WW-Index1111111111111111111111111111111111111111111111111;} -{\s177\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111111111;} -{\s178\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext178 WW-caption1111111111111111111111111111111111111111111111111111111111111111111;} -{\s179\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext179 WW-Index11111111111111111111111111111111111111111111111111;} -{\s180\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111111111;} -{\s181\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext181 WW-caption11111111111111111111111111111111111111111111111111111111111111111111;} -{\s182\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext182 WW-Index111111111111111111111111111111111111111111111111111;} -{\s183\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111111111;} -{\s184\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext184 WW-caption111111111111111111111111111111111111111111111111111111111111111111111;} -{\s185\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext185 WW-Index1111111111111111111111111111111111111111111111111111;} +{\s145\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111;} +{\s146\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext146 WW-caption111111111111111111111111111111111111111111111;} +{\s147\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext147 WW-Index111111111111111111111111111111111111111111111;} +{\s148\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111;} +{\s149\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext149 WW-caption1111111111111111111111111111111111111111111111;} +{\s150\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext150 WW-Index1111111111111111111111111111111111111111111111;} +{\s151\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111111;} +{\s152\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext152 WW-caption11111111111111111111111111111111111111111111111;} +{\s153\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext153 WW-Index11111111111111111111111111111111111111111111111;} +{\s154\sb240\sa120\keepn\rtlch\af6\afs28\lang255\ltrch\dbch\af12\langfe1033\hich\f6\fs28\lang1033\loch\f6\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111111;} +{\s155\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext155 WW-caption111111111111111111111111111111111111111111111111;} +{\s156\rtlch\af7\afs16\lang255\ltrch\dbch\langfe1033\hich\f7\fs16\lang1033\loch\f7\fs16\lang1033\sbasedon1\snext156 WW-Index111111111111111111111111111111111111111111111111;} +{\s157\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111111;} +{\s158\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext158 WW-caption1111111111111111111111111111111111111111111111111;} +{\s159\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext159 WW-Index1111111111111111111111111111111111111111111111111;} +{\s160\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext160 WW-caption11111111111111111111111111111111111111111111111111;} +{\s161\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext161 WW-caption111111111111111111111111111111111111111111111111111;} +{\s162\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext162 WW-caption1111111111111111111111111111111111111111111111111111;} +{\s163\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext163 WW-caption11111111111111111111111111111111111111111111111111111;} +{\s164\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext164 WW-caption111111111111111111111111111111111111111111111111111111;} +{\s165\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext165 WW-caption1111111111111111111111111111111111111111111111111111111;} +{\s166\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext166 WW-caption11111111111111111111111111111111111111111111111111111111;} +{\s167\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext167 WW-caption111111111111111111111111111111111111111111111111111111111;} +{\s168\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext168 WW-caption1111111111111111111111111111111111111111111111111111111111;} +{\s169\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext169 WW-caption11111111111111111111111111111111111111111111111111111111111;} +{\s170\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext170 WW-caption111111111111111111111111111111111111111111111111111111111111;} +{\s171\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext171 WW-caption1111111111111111111111111111111111111111111111111111111111111;} +{\s172\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext172 WW-caption11111111111111111111111111111111111111111111111111111111111111;} +{\s173\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext173 WW-caption111111111111111111111111111111111111111111111111111111111111111;} +{\s174\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111111111;} +{\s175\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext175 WW-caption1111111111111111111111111111111111111111111111111111111111111111;} +{\s176\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext176 WW-Index11111111111111111111111111111111111111111111111111;} +{\s177\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111111111;} +{\s178\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext178 WW-caption11111111111111111111111111111111111111111111111111111111111111111;} +{\s179\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext179 WW-Index111111111111111111111111111111111111111111111111111;} +{\s180\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111111111;} +{\s181\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext181 WW-caption111111111111111111111111111111111111111111111111111111111111111111;} +{\s182\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext182 WW-Index1111111111111111111111111111111111111111111111111111;} +{\s183\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext183 WW-caption1111111111111111111111111111111111111111111111111111111111111111111;} +{\s184\sb120\sa120\rtlch\af7\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\f7\fs24\lang1033\i\loch\f7\fs24\lang1033\i\sbasedon1\snext184 WW-caption11111111111111111111111111111111111111111111111111111111111111111111;} +{\s185\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext185 WW-caption111111111111111111111111111111111111111111111111111111111111111111111;} {\s186\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111111111111;} {\s187\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext187 WW-caption1111111111111111111111111111111111111111111111111111111111111111111111;} {\s188\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext188 WW-Index11111111111111111111111111111111111111111111111111111;} @@ -709,496 +709,516 @@ {\s706\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext706 WW-caption111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} {\s707\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext707 WW-Index1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} {\s708\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} -{\s709\sb120\sa120\rtlch\afs16\lang255\ai\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\loch\fs16\lang1033\i\sbasedon1\snext709 WW-caption1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s709\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext709 WW-caption1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} {\s710\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext710 WW-Index11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} {\s711\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} -{\s712\sb120\sa120\rtlch\afs16\lang255\ai\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\loch\fs16\lang1033\i\sbasedon1\snext712 WW-caption11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s712\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext712 WW-caption11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} {\s713\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext713 WW-Index111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} -{\s714\rtlch\afs24\lang255\ltrch\dbch\langfe1033\hich\fs24\lang1033\loch\fs24\lang1033\snext1 heading 1;} -{\s715\rtlch\afs24\lang255\ltrch\dbch\langfe1033\hich\fs24\lang1033\loch\fs24\lang1033\snext1 heading 2;} -{\s716\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext716 Table Contents;} -{\s717\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon716\snext717 Table Heading;} -{\s718\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext718 WW-Table Contents;} -{\s719\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon718\snext719 WW-Table Heading;} -{\s720\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext720 WW-Table Contents1;} -{\s721\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon720\snext721 WW-Table Heading1;} -{\s722\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext722 WW-Table Contents12;} -{\s723\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon722\snext723 WW-Table Heading12;} -{\s724\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext724 WW-Table Contents123;} -{\s725\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon724\snext725 WW-Table Heading123;} -{\s726\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext726 WW-Table Contents1234;} -{\s727\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon726\snext727 WW-Table Heading1234;} -{\s728\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext728 WW-Table Contents12345;} -{\s729\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon728\snext729 WW-Table Heading12345;} -{\s730\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext730 WW-Table Contents123456;} -{\s731\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon730\snext731 WW-Table Heading123456;} -{\s732\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext732 WW-Table Contents1234567;} -{\s733\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon732\snext733 WW-Table Heading1234567;} -{\s734\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext734 WW-Table Contents12345678;} -{\s735\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon734\snext735 WW-Table Heading12345678;} -{\s736\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext736 WW-Table Contents123456789;} -{\s737\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon736\snext737 WW-Table Heading123456789;} -{\s738\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext738 WW-Table Contents12345678910;} -{\s739\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon738\snext739 WW-Table Heading12345678910;} -{\s740\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext740 WW-Table Contents1234567891011;} -{\s741\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon740\snext741 WW-Table Heading1234567891011;} -{\s742\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext742 WW-Table Contents123456789101112;} -{\s743\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon742\snext743 WW-Table Heading123456789101112;} -{\s744\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext744 WW-Table Contents12345678910111213;} -{\s745\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon744\snext745 WW-Table Heading12345678910111213;} -{\s746\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext746 WW-Table Contents1234567891011121314;} -{\s747\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon746\snext747 WW-Table Heading1234567891011121314;} -{\s748\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext748 WW-Table Contents123456789101112131415;} -{\s749\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon748\snext749 WW-Table Heading123456789101112131415;} -{\s750\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext750 WW-Table Contents12345678910111213141516;} -{\s751\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon750\snext751 WW-Table Heading12345678910111213141516;} -{\s752\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext752 WW-Table Contents1234567891011121314151617;} -{\s753\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon752\snext753 WW-Table Heading1234567891011121314151617;} -{\s754\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext754 WW-Table Contents123456789101112131415161718;} -{\s755\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon754\snext755 WW-Table Heading123456789101112131415161718;} -{\s756\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext756 WW-Table Contents12345678910111213141516171819;} -{\s757\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon756\snext757 WW-Table Heading12345678910111213141516171819;} -{\s758\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext758 WW-Table Contents1234567891011121314151617181920;} -{\s759\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon758\snext759 WW-Table Heading1234567891011121314151617181920;} -{\s760\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext760 WW-Table Contents123456789101112131415161718192021;} -{\s761\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon760\snext761 WW-Table Heading123456789101112131415161718192021;} -{\s762\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext762 WW-Table Contents12345678910111213141516171819202122;} -{\s763\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon762\snext763 WW-Table Heading12345678910111213141516171819202122;} -{\s764\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext764 WW-Table Contents1234567891011121314151617181920212223;} -{\s765\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon764\snext765 WW-Table Heading1234567891011121314151617181920212223;} -{\s766\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext766 WW-Table Contents123456789101112131415161718192021222324;} -{\s767\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon766\snext767 WW-Table Heading123456789101112131415161718192021222324;} -{\s768\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext768 WW-Table Contents12345678910111213141516171819202122232425;} -{\s769\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon768\snext769 WW-Table Heading12345678910111213141516171819202122232425;} -{\s770\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext770 WW-Table Contents1234567891011121314151617181920212223242526;} -{\s771\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon770\snext771 WW-Table Heading1234567891011121314151617181920212223242526;} -{\s772\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext772 WW-Table Contents123456789101112131415161718192021222324252627;} -{\s773\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon772\snext773 WW-Table Heading123456789101112131415161718192021222324252627;} -{\s774\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext774 WW-Table Contents12345678910111213141516171819202122232425262728;} -{\s775\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon774\snext775 WW-Table Heading12345678910111213141516171819202122232425262728;} -{\s776\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext776 WW-Table Contents1234567891011121314151617181920212223242526272829;} -{\s777\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon776\snext777 WW-Table Heading1234567891011121314151617181920212223242526272829;} -{\s778\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext778 WW-Table Contents123456789101112131415161718192021222324252627282930;} -{\s779\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon778\snext779 WW-Table Heading123456789101112131415161718192021222324252627282930;} -{\s780\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext780 WW-Table Contents12345678910111213141516171819202122232425262728293031;} -{\s781\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon780\snext781 WW-Table Heading12345678910111213141516171819202122232425262728293031;} -{\s782\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext782 WW-Table Contents1234567891011121314151617181920212223242526272829303132;} -{\s783\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon782\snext783 WW-Table Heading1234567891011121314151617181920212223242526272829303132;} -{\s784\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext784 WW-Table Contents123456789101112131415161718192021222324252627282930313233;} -{\s785\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon784\snext785 WW-Table Heading123456789101112131415161718192021222324252627282930313233;} -{\s786\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext786 WW-Table Contents12345678910111213141516171819202122232425262728293031323334;} -{\s787\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon786\snext787 WW-Table Heading12345678910111213141516171819202122232425262728293031323334;} -{\s788\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext788 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435;} -{\s789\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon788\snext789 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435;} -{\s790\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext790 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536;} -{\s791\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon790\snext791 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536;} -{\s792\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext792 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637;} -{\s793\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon792\snext793 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637;} -{\s794\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext794 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738;} -{\s795\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon794\snext795 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738;} -{\s796\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext796 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839;} -{\s797\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon796\snext797 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839;} -{\s798\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext798 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940;} -{\s799\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon798\snext799 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940;} -{\s800\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext800 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041;} -{\s801\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon800\snext801 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041;} -{\s802\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext802 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142;} -{\s803\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon802\snext803 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142;} -{\s804\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext804 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243;} -{\s805\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon804\snext805 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243;} -{\s806\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext806 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344;} -{\s807\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon806\snext807 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344;} -{\s808\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext808 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445;} -{\s809\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon808\snext809 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445;} -{\s810\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext810 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546;} -{\s811\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon810\snext811 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546;} -{\s812\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext812 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647;} -{\s813\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon812\snext813 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647;} -{\s814\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext814 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748;} -{\s815\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon814\snext815 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748;} -{\s816\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext816 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849;} -{\s817\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon816\snext817 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849;} -{\s818\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext818 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950;} -{\s819\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon818\snext819 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950;} -{\s820\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext820 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051;} -{\s821\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon820\snext821 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051;} -{\s822\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext822 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152;} -{\s823\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon822\snext823 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152;} -{\s824\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext824 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253;} -{\s825\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon824\snext825 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253;} -{\s826\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext826 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354;} -{\s827\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon826\snext827 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354;} -{\s828\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext828 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455;} -{\s829\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon828\snext829 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455;} -{\s830\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext830 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556;} -{\s831\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon830\snext831 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556;} -{\s832\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext832 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657;} -{\s833\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon832\snext833 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657;} -{\s834\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext834 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758;} -{\s835\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon834\snext835 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758;} -{\s836\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext836 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859;} -{\s837\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon836\snext837 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859;} -{\s838\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext838 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960;} -{\s839\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon838\snext839 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960;} -{\s840\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext840 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061;} -{\s841\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon840\snext841 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061;} -{\s842\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext842 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162;} -{\s843\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon842\snext843 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162;} -{\s844\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext844 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263;} -{\s845\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon844\snext845 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263;} -{\s846\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext846 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364;} -{\s847\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon846\snext847 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364;} -{\s848\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext848 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465;} -{\s849\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon848\snext849 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465;} -{\s850\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext850 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566;} -{\s851\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon850\snext851 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566;} -{\s852\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext852 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667;} -{\s853\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon852\snext853 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667;} -{\s854\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext854 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768;} -{\s855\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon854\snext855 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768;} -{\s856\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext856 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869;} -{\s857\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon856\snext857 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869;} -{\s858\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext858 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970;} -{\s859\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon858\snext859 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970;} -{\s860\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext860 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071;} -{\s861\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon860\snext861 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071;} -{\s862\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext862 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172;} -{\s863\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon862\snext863 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172;} -{\s864\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext864 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273;} -{\s865\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon864\snext865 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273;} -{\s866\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext866 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374;} -{\s867\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon866\snext867 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374;} -{\s868\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext868 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475;} -{\s869\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon868\snext869 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475;} -{\s870\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext870 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576;} -{\s871\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon870\snext871 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576;} -{\s872\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext872 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677;} -{\s873\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon872\snext873 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677;} -{\s874\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext874 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778;} -{\s875\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon874\snext875 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778;} -{\s876\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext876 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879;} -{\s877\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon876\snext877 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879;} -{\s878\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext878 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980;} -{\s879\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon878\snext879 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980;} -{\s880\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext880 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081;} -{\s881\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon880\snext881 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081;} -{\s882\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext882 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182;} -{\s883\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon882\snext883 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182;} -{\s884\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext884 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283;} -{\s885\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon884\snext885 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283;} -{\s886\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext886 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384;} -{\s887\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon886\snext887 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384;} -{\s888\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext888 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485;} -{\s889\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon888\snext889 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485;} -{\s890\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext890 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586;} -{\s891\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon890\snext891 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586;} -{\s892\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext892 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687;} -{\s893\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon892\snext893 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687;} -{\s894\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext894 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788;} -{\s895\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon894\snext895 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788;} -{\s896\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext896 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889;} -{\s897\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon896\snext897 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889;} -{\s898\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext898 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990;} -{\s899\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon898\snext899 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990;} -{\s900\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext900 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091;} -{\s901\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon900\snext901 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091;} -{\s902\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext902 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192;} -{\s903\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon902\snext903 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192;} -{\s904\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext904 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293;} -{\s905\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon904\snext905 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293;} -{\s906\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext906 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394;} -{\s907\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon906\snext907 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394;} -{\s908\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext908 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495;} -{\s909\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon908\snext909 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495;} -{\s910\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext910 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596;} -{\s911\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon910\snext911 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596;} -{\s912\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext912 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697;} -{\s913\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon912\snext913 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697;} -{\s914\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext914 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798;} -{\s915\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon914\snext915 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798;} -{\s916\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext916 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899;} -{\s917\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon916\snext917 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899;} -{\s918\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext918 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100;} -{\s919\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon918\snext919 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100;} -{\s920\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext920 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101;} -{\s921\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon920\snext921 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101;} -{\s922\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext922 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102;} -{\s923\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon922\snext923 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102;} -{\s924\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext924 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103;} -{\s925\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon924\snext925 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103;} -{\s926\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext926 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104;} -{\s927\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon926\snext927 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104;} -{\s928\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext928 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105;} -{\s929\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon928\snext929 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105;} -{\s930\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext930 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106;} -{\s931\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon930\snext931 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106;} -{\s932\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext932 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107;} -{\s933\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon932\snext933 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107;} -{\s934\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext934 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108;} -{\s935\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon934\snext935 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108;} -{\s936\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext936 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109;} -{\s937\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon936\snext937 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109;} -{\s938\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext938 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110;} -{\s939\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon938\snext939 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110;} -{\s940\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext940 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111;} -{\s941\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon940\snext941 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111;} -{\s942\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext942 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112;} -{\s943\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon942\snext943 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112;} -{\s944\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext944 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113;} -{\s945\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon944\snext945 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113;} -{\s946\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext946 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114;} -{\s947\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon946\snext947 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114;} -{\s948\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext948 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115;} -{\s949\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon948\snext949 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115;} -{\s950\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext950 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116;} -{\s951\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon950\snext951 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116;} -{\s952\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext952 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117;} -{\s953\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon952\snext953 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117;} -{\s954\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext954 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118;} -{\s955\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon954\snext955 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118;} -{\s956\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext956 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119;} -{\s957\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon956\snext957 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119;} -{\s958\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext958 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120;} -{\s959\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon958\snext959 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120;} -{\s960\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext960 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121;} -{\s961\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon960\snext961 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121;} -{\s962\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext962 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122;} -{\s963\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon962\snext963 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122;} -{\s964\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext964 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123;} -{\s965\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon964\snext965 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123;} -{\s966\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext966 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124;} -{\s967\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon966\snext967 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124;} -{\s968\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext968 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125;} -{\s969\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon968\snext969 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125;} -{\s970\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext970 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126;} -{\s971\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon970\snext971 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126;} -{\s972\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext972 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127;} -{\s973\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon972\snext973 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127;} -{\s974\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext974 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128;} -{\s975\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon974\snext975 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128;} -{\s976\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext976 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129;} -{\s977\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon976\snext977 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129;} -{\s978\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext978 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130;} -{\s979\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon978\snext979 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130;} -{\s980\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext980 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131;} -{\s981\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon980\snext981 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131;} -{\s982\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext982 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132;} -{\s983\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon982\snext983 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132;} -{\s984\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext984 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133;} -{\s985\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon984\snext985 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133;} -{\s986\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext986 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134;} -{\s987\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon986\snext987 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134;} -{\s988\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext988 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135;} -{\s989\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon988\snext989 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135;} -{\s990\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext990 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136;} -{\s991\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon990\snext991 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136;} -{\s992\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext992 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137;} -{\s993\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon992\snext993 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137;} -{\s994\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext994 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138;} -{\s995\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon994\snext995 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138;} -{\s996\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext996 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139;} -{\s997\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon996\snext997 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139;} -{\s998\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext998 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140;} -{\s999\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon998\snext999 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140;} -{\s1000\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1000 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141;} -{\s1001\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1000\snext1001 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141;} -{\s1002\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1002 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142;} -{\s1003\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1002\snext1003 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142;} -{\s1004\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1004 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143;} -{\s1005\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1004\snext1005 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143;} -{\s1006\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1006 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144;} -{\s1007\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1006\snext1007 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144;} -{\s1008\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1008 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145;} -{\s1009\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1008\snext1009 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145;} -{\s1010\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1010 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146;} -{\s1011\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1010\snext1011 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146;} -{\s1012\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1012 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147;} -{\s1013\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1012\snext1013 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147;} -{\s1014\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1014 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148;} -{\s1015\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1014\snext1015 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148;} -{\s1016\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1016 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149;} -{\s1017\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1016\snext1017 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149;} -{\s1018\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1018 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150;} -{\s1019\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1018\snext1019 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150;} -{\s1020\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1020 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151;} -{\s1021\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1020\snext1021 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151;} -{\s1022\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1022 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152;} -{\s1023\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1022\snext1023 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152;} -{\s1024\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1024 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153;} -{\s1025\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1024\snext1025 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153;} -{\s1026\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1026 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154;} -{\s1027\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1026\snext1027 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154;} -{\s1028\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1028 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155;} -{\s1029\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1028\snext1029 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155;} -{\s1030\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1030 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156;} -{\s1031\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1030\snext1031 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156;} -{\s1032\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1032 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157;} -{\s1033\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1032\snext1033 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157;} -{\s1034\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1034 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158;} -{\s1035\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1034\snext1035 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158;} -{\s1036\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1036 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159;} -{\s1037\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1036\snext1037 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159;} -{\s1038\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1038 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160;} -{\s1039\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1038\snext1039 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160;} -{\s1040\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1040 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161;} -{\s1041\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1040\snext1041 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161;} -{\s1042\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1042 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162;} -{\s1043\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1042\snext1043 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162;} -{\s1044\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1044 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163;} -{\s1045\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1044\snext1045 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163;} -{\s1046\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1046 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164;} -{\s1047\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1046\snext1047 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164;} -{\s1048\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1048 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165;} -{\s1049\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1048\snext1049 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165;} -{\s1050\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1050 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166;} -{\s1051\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1050\snext1051 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166;} -{\s1052\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1052 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167;} -{\s1053\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1052\snext1053 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167;} -{\s1054\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1054 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168;} -{\s1055\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1054\snext1055 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168;} -{\s1056\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1056 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169;} -{\s1057\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1056\snext1057 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169;} -{\s1058\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1058 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170;} -{\s1059\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1058\snext1059 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170;} -{\s1060\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1060 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171;} -{\s1061\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1060\snext1061 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171;} -{\s1062\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1062 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172;} -{\s1063\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1062\snext1063 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172;} -{\s1064\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1064 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173;} -{\s1065\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1064\snext1065 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173;} -{\s1066\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1066 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174;} -{\s1067\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1066\snext1067 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174;} -{\s1068\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1068 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175;} -{\s1069\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1068\snext1069 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175;} -{\s1070\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1070 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176;} -{\s1071\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1070\snext1071 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176;} -{\s1072\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1072 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177;} -{\s1073\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1072\snext1073 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177;} -{\s1074\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1074 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178;} -{\s1075\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1074\snext1075 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178;} -{\s1076\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1076 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179;} -{\s1077\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1076\snext1077 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179;} -{\s1078\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1078 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180;} -{\s1079\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1078\snext1079 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180;} -{\s1080\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1080 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181;} -{\s1081\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1080\snext1081 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181;} -{\s1082\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1082 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182;} -{\s1083\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1082\snext1083 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182;} -{\s1084\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1084 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183;} -{\s1085\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1084\snext1085 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183;} -{\s1086\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1086 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184;} -{\s1087\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1086\snext1087 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184;} -{\s1088\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1088 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185;} -{\s1089\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1088\snext1089 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185;} -{\s1090\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1090 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186;} -{\s1091\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1090\snext1091 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186;} -{\s1092\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1092 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187;} -{\s1093\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1092\snext1093 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187;} -{\s1094\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1094 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188;} -{\s1095\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1094\snext1095 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188;} -{\s1096\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1096 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189;} -{\s1097\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1096\snext1097 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189;} -{\s1098\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1098 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190;} -{\s1099\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1098\snext1099 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190;} -{\s1100\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1100 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191;} -{\s1101\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1100\snext1101 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191;} -{\s1102\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1102 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192;} -{\s1103\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1102\snext1103 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192;} -{\s1104\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1104 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193;} -{\s1105\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1104\snext1105 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193;} -{\s1106\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1106 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194;} -{\s1107\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1106\snext1107 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194;} -{\s1108\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1108 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195;} -{\s1109\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1108\snext1109 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195;} -{\s1110\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1110 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196;} -{\s1111\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1110\snext1111 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196;} -{\s1112\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1112 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197;} -{\s1113\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1112\snext1113 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197;} -{\s1114\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1114 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198;} -{\s1115\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1114\snext1115 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198;} -{\s1116\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1116 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199;} -{\s1117\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1116\snext1117 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199;} -{\s1118\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1118 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200;} -{\s1119\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1118\snext1119 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200;} -{\s1120\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1120 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201;} -{\s1121\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1120\snext1121 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201;} -{\s1122\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1122 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202;} -{\s1123\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1122\snext1123 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202;} -{\s1124\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1124 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203;} -{\s1125\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1124\snext1125 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203;} -{\s1126\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1126 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204;} -{\s1127\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1126\snext1127 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204;} -{\s1128\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1128 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205;} -{\s1129\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1128\snext1129 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205;} -{\s1130\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1130 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206;} -{\s1131\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1130\snext1131 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206;} -{\s1132\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1132 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207;} -{\s1133\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1132\snext1133 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207;} -{\s1134\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1134 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208;} -{\s1135\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1134\snext1135 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208;} -{\s1136\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1136 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209;} -{\s1137\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1136\snext1137 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209;} -{\s1138\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1138 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210;} -{\s1139\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1138\snext1139 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210;} -{\s1140\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1140 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211;} -{\s1141\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1140\snext1141 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211;} -{\s1142\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1142 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212;} -{\s1143\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1142\snext1143 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212;} -{\s1144\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1144 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213;} -{\s1145\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1144\snext1145 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213;} -{\s1146\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1146 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214;} -{\s1147\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1146\snext1147 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214;} -{\s1148\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1148 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215;} -{\s1149\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1148\snext1149 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215;} -{\s1150\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1150 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216;} -{\s1151\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1150\snext1151 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216;} -{\s1152\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1152 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217;} -{\s1153\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1152\snext1153 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217;} -{\s1154\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1154 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218;} -{\s1155\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1154\snext1155 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218;} -{\s1156\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1156 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219;} -{\s1157\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1156\snext1157 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219;} -{\s1158\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1158 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220;} -{\s1159\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1158\snext1159 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220;} -{\s1160\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1160 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221;} -{\s1161\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1160\snext1161 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221;} -{\s1162\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1162 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222;} -{\s1163\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1162\snext1163 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222;} -{\s1164\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1164 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223;} -{\s1165\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1164\snext1165 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223;} -{\s1166\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1166 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224;} -{\s1167\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1166\snext1167 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224;} -{\s1168\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1168 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225;} -{\s1169\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1168\snext1169 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225;} -{\s1170\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1170 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226;} -{\s1171\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1170\snext1171 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226;} -{\s1172\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1172 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227;} -{\s1173\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1172\snext1173 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227;} -{\s1174\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1174 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228;} -{\s1175\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1174\snext1175 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228;} -{\s1176\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1176 Table Contents;} -{\s1177\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1176\snext1177 Table Heading;} -{\*\cs1179\cf2\ul\ulc0\rtlch\af1\afs24\lang255\ltrch\dbch\af1\langfe255\hich\f1\fs24\lang2060\loch\f1\fs24\lang2060 Internet link;} +{\s714\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s715\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext715 WW-caption111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s716\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext716 WW-Index1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s717\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s718\sb120\sa120\rtlch\afs24\lang255\ai\ltrch\dbch\langfe1033\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext718 WW-caption1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s719\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext719 WW-Index11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s720\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s721\sb120\sa120\rtlch\afs16\lang255\ai\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\loch\fs16\lang1033\i\sbasedon1\snext721 WW-caption11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s722\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext722 WW-Index111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s723\sb240\sa120\keepn\rtlch\af8\afs28\lang255\ltrch\dbch\af13\langfe1033\hich\f8\fs28\lang1033\loch\f8\fs28\lang1033\sbasedon1\snext3 WW-Heading1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s724\sb120\sa120\rtlch\afs16\lang255\ai\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\loch\fs16\lang1033\i\sbasedon1\snext724 WW-caption111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s725\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext725 WW-Index1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;} +{\s726\rtlch\afs24\lang255\ltrch\dbch\langfe1033\hich\fs24\lang1033\loch\fs24\lang1033\snext1 heading 1;} +{\s727\rtlch\afs24\lang255\ltrch\dbch\langfe1033\hich\fs24\lang1033\loch\fs24\lang1033\snext1 heading 2;} +{\s728\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext728 Table Contents;} +{\s729\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon728\snext729 Table Heading;} +{\s730\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext730 WW-Table Contents;} +{\s731\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon730\snext731 WW-Table Heading;} +{\s732\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext732 WW-Table Contents1;} +{\s733\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon732\snext733 WW-Table Heading1;} +{\s734\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext734 WW-Table Contents12;} +{\s735\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon734\snext735 WW-Table Heading12;} +{\s736\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext736 WW-Table Contents123;} +{\s737\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon736\snext737 WW-Table Heading123;} +{\s738\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext738 WW-Table Contents1234;} +{\s739\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon738\snext739 WW-Table Heading1234;} +{\s740\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext740 WW-Table Contents12345;} +{\s741\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon740\snext741 WW-Table Heading12345;} +{\s742\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext742 WW-Table Contents123456;} +{\s743\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon742\snext743 WW-Table Heading123456;} +{\s744\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext744 WW-Table Contents1234567;} +{\s745\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon744\snext745 WW-Table Heading1234567;} +{\s746\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext746 WW-Table Contents12345678;} +{\s747\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon746\snext747 WW-Table Heading12345678;} +{\s748\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext748 WW-Table Contents123456789;} +{\s749\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon748\snext749 WW-Table Heading123456789;} +{\s750\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext750 WW-Table Contents12345678910;} +{\s751\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon750\snext751 WW-Table Heading12345678910;} +{\s752\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext752 WW-Table Contents1234567891011;} +{\s753\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon752\snext753 WW-Table Heading1234567891011;} +{\s754\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext754 WW-Table Contents123456789101112;} +{\s755\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon754\snext755 WW-Table Heading123456789101112;} +{\s756\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext756 WW-Table Contents12345678910111213;} +{\s757\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon756\snext757 WW-Table Heading12345678910111213;} +{\s758\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext758 WW-Table Contents1234567891011121314;} +{\s759\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon758\snext759 WW-Table Heading1234567891011121314;} +{\s760\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext760 WW-Table Contents123456789101112131415;} +{\s761\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon760\snext761 WW-Table Heading123456789101112131415;} +{\s762\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext762 WW-Table Contents12345678910111213141516;} +{\s763\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon762\snext763 WW-Table Heading12345678910111213141516;} +{\s764\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext764 WW-Table Contents1234567891011121314151617;} +{\s765\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon764\snext765 WW-Table Heading1234567891011121314151617;} +{\s766\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext766 WW-Table Contents123456789101112131415161718;} +{\s767\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon766\snext767 WW-Table Heading123456789101112131415161718;} +{\s768\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext768 WW-Table Contents12345678910111213141516171819;} +{\s769\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon768\snext769 WW-Table Heading12345678910111213141516171819;} +{\s770\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext770 WW-Table Contents1234567891011121314151617181920;} +{\s771\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon770\snext771 WW-Table Heading1234567891011121314151617181920;} +{\s772\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext772 WW-Table Contents123456789101112131415161718192021;} +{\s773\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon772\snext773 WW-Table Heading123456789101112131415161718192021;} +{\s774\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext774 WW-Table Contents12345678910111213141516171819202122;} +{\s775\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon774\snext775 WW-Table Heading12345678910111213141516171819202122;} +{\s776\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext776 WW-Table Contents1234567891011121314151617181920212223;} +{\s777\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon776\snext777 WW-Table Heading1234567891011121314151617181920212223;} +{\s778\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext778 WW-Table Contents123456789101112131415161718192021222324;} +{\s779\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon778\snext779 WW-Table Heading123456789101112131415161718192021222324;} +{\s780\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext780 WW-Table Contents12345678910111213141516171819202122232425;} +{\s781\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon780\snext781 WW-Table Heading12345678910111213141516171819202122232425;} +{\s782\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext782 WW-Table Contents1234567891011121314151617181920212223242526;} +{\s783\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon782\snext783 WW-Table Heading1234567891011121314151617181920212223242526;} +{\s784\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext784 WW-Table Contents123456789101112131415161718192021222324252627;} +{\s785\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon784\snext785 WW-Table Heading123456789101112131415161718192021222324252627;} +{\s786\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext786 WW-Table Contents12345678910111213141516171819202122232425262728;} +{\s787\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon786\snext787 WW-Table Heading12345678910111213141516171819202122232425262728;} +{\s788\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext788 WW-Table Contents1234567891011121314151617181920212223242526272829;} +{\s789\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon788\snext789 WW-Table Heading1234567891011121314151617181920212223242526272829;} +{\s790\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext790 WW-Table Contents123456789101112131415161718192021222324252627282930;} +{\s791\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon790\snext791 WW-Table Heading123456789101112131415161718192021222324252627282930;} +{\s792\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext792 WW-Table Contents12345678910111213141516171819202122232425262728293031;} +{\s793\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon792\snext793 WW-Table Heading12345678910111213141516171819202122232425262728293031;} +{\s794\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext794 WW-Table Contents1234567891011121314151617181920212223242526272829303132;} +{\s795\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon794\snext795 WW-Table Heading1234567891011121314151617181920212223242526272829303132;} +{\s796\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext796 WW-Table Contents123456789101112131415161718192021222324252627282930313233;} +{\s797\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon796\snext797 WW-Table Heading123456789101112131415161718192021222324252627282930313233;} +{\s798\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext798 WW-Table Contents12345678910111213141516171819202122232425262728293031323334;} +{\s799\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon798\snext799 WW-Table Heading12345678910111213141516171819202122232425262728293031323334;} +{\s800\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext800 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435;} +{\s801\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon800\snext801 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435;} +{\s802\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext802 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536;} +{\s803\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon802\snext803 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536;} +{\s804\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext804 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637;} +{\s805\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon804\snext805 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637;} +{\s806\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext806 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738;} +{\s807\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon806\snext807 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738;} +{\s808\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext808 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839;} +{\s809\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon808\snext809 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839;} +{\s810\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext810 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940;} +{\s811\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon810\snext811 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940;} +{\s812\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext812 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041;} +{\s813\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon812\snext813 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041;} +{\s814\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext814 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142;} +{\s815\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon814\snext815 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142;} +{\s816\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext816 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243;} +{\s817\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon816\snext817 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243;} +{\s818\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext818 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344;} +{\s819\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon818\snext819 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344;} +{\s820\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext820 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445;} +{\s821\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon820\snext821 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445;} +{\s822\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext822 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546;} +{\s823\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon822\snext823 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546;} +{\s824\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext824 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647;} +{\s825\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon824\snext825 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647;} +{\s826\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext826 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748;} +{\s827\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon826\snext827 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748;} +{\s828\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext828 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849;} +{\s829\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon828\snext829 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849;} +{\s830\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext830 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950;} +{\s831\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon830\snext831 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950;} +{\s832\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext832 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051;} +{\s833\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon832\snext833 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051;} +{\s834\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext834 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152;} +{\s835\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon834\snext835 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152;} +{\s836\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext836 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253;} +{\s837\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon836\snext837 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253;} +{\s838\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext838 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354;} +{\s839\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon838\snext839 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354;} +{\s840\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext840 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455;} +{\s841\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon840\snext841 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455;} +{\s842\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext842 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556;} +{\s843\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon842\snext843 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556;} +{\s844\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext844 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657;} +{\s845\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon844\snext845 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657;} +{\s846\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext846 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758;} +{\s847\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon846\snext847 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758;} +{\s848\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext848 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859;} +{\s849\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon848\snext849 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859;} +{\s850\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext850 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960;} +{\s851\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon850\snext851 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960;} +{\s852\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext852 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061;} +{\s853\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon852\snext853 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061;} +{\s854\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext854 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162;} +{\s855\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon854\snext855 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162;} +{\s856\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext856 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263;} +{\s857\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon856\snext857 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263;} +{\s858\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext858 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364;} +{\s859\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon858\snext859 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364;} +{\s860\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext860 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465;} +{\s861\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon860\snext861 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465;} +{\s862\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext862 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566;} +{\s863\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon862\snext863 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566;} +{\s864\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext864 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667;} +{\s865\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon864\snext865 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667;} +{\s866\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext866 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768;} +{\s867\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon866\snext867 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768;} +{\s868\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext868 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869;} +{\s869\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon868\snext869 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869;} +{\s870\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext870 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970;} +{\s871\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon870\snext871 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970;} +{\s872\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext872 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071;} +{\s873\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon872\snext873 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071;} +{\s874\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext874 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172;} +{\s875\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon874\snext875 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172;} +{\s876\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext876 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273;} +{\s877\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon876\snext877 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273;} +{\s878\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext878 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374;} +{\s879\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon878\snext879 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374;} +{\s880\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext880 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475;} +{\s881\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon880\snext881 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475;} +{\s882\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext882 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576;} +{\s883\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon882\snext883 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576;} +{\s884\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext884 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677;} +{\s885\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon884\snext885 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677;} +{\s886\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext886 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778;} +{\s887\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon886\snext887 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778;} +{\s888\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext888 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879;} +{\s889\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon888\snext889 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879;} +{\s890\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext890 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980;} +{\s891\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon890\snext891 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980;} +{\s892\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext892 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081;} +{\s893\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon892\snext893 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081;} +{\s894\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext894 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182;} +{\s895\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon894\snext895 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182;} +{\s896\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext896 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283;} +{\s897\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon896\snext897 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283;} +{\s898\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext898 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384;} +{\s899\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon898\snext899 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384;} +{\s900\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext900 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485;} +{\s901\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon900\snext901 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485;} +{\s902\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext902 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586;} +{\s903\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon902\snext903 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586;} +{\s904\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext904 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687;} +{\s905\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon904\snext905 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687;} +{\s906\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext906 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788;} +{\s907\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon906\snext907 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788;} +{\s908\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext908 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889;} +{\s909\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon908\snext909 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889;} +{\s910\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext910 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990;} +{\s911\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon910\snext911 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990;} +{\s912\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext912 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091;} +{\s913\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon912\snext913 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091;} +{\s914\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext914 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192;} +{\s915\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon914\snext915 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192;} +{\s916\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext916 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293;} +{\s917\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon916\snext917 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293;} +{\s918\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext918 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394;} +{\s919\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon918\snext919 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394;} +{\s920\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext920 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495;} +{\s921\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon920\snext921 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495;} +{\s922\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext922 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596;} +{\s923\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon922\snext923 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596;} +{\s924\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext924 WW-Table Contents12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697;} +{\s925\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon924\snext925 WW-Table Heading12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697;} +{\s926\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext926 WW-Table Contents1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798;} +{\s927\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon926\snext927 WW-Table Heading1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798;} +{\s928\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext928 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899;} +{\s929\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon928\snext929 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899;} +{\s930\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext930 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100;} +{\s931\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon930\snext931 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100;} +{\s932\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext932 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101;} +{\s933\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon932\snext933 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101;} +{\s934\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext934 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102;} +{\s935\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon934\snext935 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102;} +{\s936\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext936 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103;} +{\s937\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon936\snext937 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103;} +{\s938\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext938 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104;} +{\s939\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon938\snext939 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104;} +{\s940\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext940 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105;} +{\s941\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon940\snext941 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105;} +{\s942\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext942 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106;} +{\s943\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon942\snext943 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106;} +{\s944\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext944 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107;} +{\s945\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon944\snext945 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107;} +{\s946\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext946 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108;} +{\s947\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon946\snext947 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108;} +{\s948\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext948 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109;} +{\s949\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon948\snext949 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109;} +{\s950\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext950 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110;} +{\s951\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon950\snext951 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110;} +{\s952\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext952 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111;} +{\s953\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon952\snext953 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111;} +{\s954\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext954 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112;} +{\s955\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon954\snext955 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112;} +{\s956\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext956 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113;} +{\s957\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon956\snext957 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113;} +{\s958\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext958 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114;} +{\s959\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon958\snext959 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114;} +{\s960\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext960 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115;} +{\s961\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon960\snext961 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115;} +{\s962\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext962 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116;} +{\s963\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon962\snext963 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116;} +{\s964\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext964 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117;} +{\s965\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon964\snext965 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117;} +{\s966\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext966 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118;} +{\s967\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon966\snext967 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118;} +{\s968\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext968 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119;} +{\s969\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon968\snext969 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119;} +{\s970\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext970 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120;} +{\s971\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon970\snext971 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120;} +{\s972\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext972 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121;} +{\s973\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon972\snext973 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121;} +{\s974\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext974 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122;} +{\s975\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon974\snext975 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122;} +{\s976\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext976 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123;} +{\s977\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon976\snext977 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123;} +{\s978\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext978 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124;} +{\s979\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon978\snext979 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124;} +{\s980\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext980 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125;} +{\s981\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon980\snext981 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125;} +{\s982\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext982 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126;} +{\s983\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon982\snext983 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126;} +{\s984\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext984 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127;} +{\s985\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon984\snext985 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127;} +{\s986\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext986 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128;} +{\s987\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon986\snext987 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128;} +{\s988\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext988 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129;} +{\s989\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon988\snext989 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129;} +{\s990\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext990 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130;} +{\s991\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon990\snext991 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130;} +{\s992\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext992 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131;} +{\s993\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon992\snext993 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131;} +{\s994\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext994 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132;} +{\s995\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon994\snext995 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132;} +{\s996\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext996 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133;} +{\s997\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon996\snext997 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133;} +{\s998\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext998 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134;} +{\s999\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon998\snext999 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134;} +{\s1000\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1000 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135;} +{\s1001\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1000\snext1001 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135;} +{\s1002\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1002 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136;} +{\s1003\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1002\snext1003 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136;} +{\s1004\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1004 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137;} +{\s1005\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1004\snext1005 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137;} +{\s1006\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1006 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138;} +{\s1007\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1006\snext1007 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138;} +{\s1008\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1008 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139;} +{\s1009\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1008\snext1009 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139;} +{\s1010\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1010 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140;} +{\s1011\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1010\snext1011 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140;} +{\s1012\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1012 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141;} +{\s1013\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1012\snext1013 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141;} +{\s1014\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1014 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142;} +{\s1015\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1014\snext1015 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142;} +{\s1016\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1016 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143;} +{\s1017\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1016\snext1017 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143;} +{\s1018\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1018 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144;} +{\s1019\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1018\snext1019 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144;} +{\s1020\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1020 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145;} +{\s1021\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1020\snext1021 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145;} +{\s1022\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1022 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146;} +{\s1023\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1022\snext1023 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146;} +{\s1024\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1024 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147;} +{\s1025\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1024\snext1025 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147;} +{\s1026\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1026 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148;} +{\s1027\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1026\snext1027 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148;} +{\s1028\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1028 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149;} +{\s1029\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1028\snext1029 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149;} +{\s1030\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1030 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150;} +{\s1031\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1030\snext1031 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150;} +{\s1032\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1032 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151;} +{\s1033\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1032\snext1033 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151;} +{\s1034\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1034 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152;} +{\s1035\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1034\snext1035 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152;} +{\s1036\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1036 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153;} +{\s1037\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1036\snext1037 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153;} +{\s1038\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1038 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154;} +{\s1039\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1038\snext1039 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154;} +{\s1040\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1040 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155;} +{\s1041\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1040\snext1041 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155;} +{\s1042\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1042 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156;} +{\s1043\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1042\snext1043 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156;} +{\s1044\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1044 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157;} +{\s1045\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1044\snext1045 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157;} +{\s1046\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1046 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158;} +{\s1047\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1046\snext1047 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158;} +{\s1048\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1048 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159;} +{\s1049\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1048\snext1049 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159;} +{\s1050\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1050 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160;} +{\s1051\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1050\snext1051 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160;} +{\s1052\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1052 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161;} +{\s1053\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1052\snext1053 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161;} +{\s1054\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1054 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162;} +{\s1055\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1054\snext1055 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162;} +{\s1056\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1056 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163;} +{\s1057\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1056\snext1057 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163;} +{\s1058\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1058 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164;} +{\s1059\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1058\snext1059 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164;} +{\s1060\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1060 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165;} +{\s1061\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1060\snext1061 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165;} +{\s1062\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1062 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166;} +{\s1063\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1062\snext1063 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166;} +{\s1064\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1064 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167;} +{\s1065\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1064\snext1065 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167;} +{\s1066\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1066 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168;} +{\s1067\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1066\snext1067 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168;} +{\s1068\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1068 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169;} +{\s1069\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1068\snext1069 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169;} +{\s1070\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1070 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170;} +{\s1071\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1070\snext1071 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170;} +{\s1072\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1072 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171;} +{\s1073\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1072\snext1073 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171;} +{\s1074\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1074 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172;} +{\s1075\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1074\snext1075 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172;} +{\s1076\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1076 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173;} +{\s1077\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1076\snext1077 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173;} +{\s1078\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1078 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174;} +{\s1079\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1078\snext1079 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174;} +{\s1080\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1080 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175;} +{\s1081\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1080\snext1081 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175;} +{\s1082\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1082 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176;} +{\s1083\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1082\snext1083 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176;} +{\s1084\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1084 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177;} +{\s1085\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1084\snext1085 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177;} +{\s1086\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1086 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178;} +{\s1087\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1086\snext1087 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178;} +{\s1088\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1088 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179;} +{\s1089\qc\rtlch\afs16\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\i\b\loch\fs16\lang1033\i\b\sbasedon1088\snext1089 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179;} +{\s1090\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1090 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180;} +{\s1091\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1090\snext1091 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180;} +{\s1092\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1092 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181;} +{\s1093\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1092\snext1093 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181;} +{\s1094\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1094 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182;} +{\s1095\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1094\snext1095 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182;} +{\s1096\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1096 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183;} +{\s1097\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1096\snext1097 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183;} +{\s1098\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1098 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184;} +{\s1099\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1098\snext1099 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184;} +{\s1100\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1100 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185;} +{\s1101\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1100\snext1101 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185;} +{\s1102\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1102 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186;} +{\s1103\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1102\snext1103 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186;} +{\s1104\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1104 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187;} +{\s1105\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1104\snext1105 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187;} +{\s1106\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1106 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188;} +{\s1107\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1106\snext1107 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188;} +{\s1108\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1108 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189;} +{\s1109\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1108\snext1109 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189;} +{\s1110\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1110 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190;} +{\s1111\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1110\snext1111 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190;} +{\s1112\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1112 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191;} +{\s1113\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1112\snext1113 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191;} +{\s1114\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1114 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192;} +{\s1115\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1114\snext1115 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192;} +{\s1116\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1116 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193;} +{\s1117\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1116\snext1117 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193;} +{\s1118\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1118 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194;} +{\s1119\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1118\snext1119 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194;} +{\s1120\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1120 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195;} +{\s1121\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1120\snext1121 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195;} +{\s1122\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1122 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196;} +{\s1123\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1122\snext1123 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196;} +{\s1124\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1124 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197;} +{\s1125\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1124\snext1125 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197;} +{\s1126\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1126 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198;} +{\s1127\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1126\snext1127 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198;} +{\s1128\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1128 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199;} +{\s1129\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1128\snext1129 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199;} +{\s1130\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1130 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200;} +{\s1131\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1130\snext1131 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200;} +{\s1132\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1132 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201;} +{\s1133\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1132\snext1133 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201;} +{\s1134\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1134 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202;} +{\s1135\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1134\snext1135 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202;} +{\s1136\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1136 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203;} +{\s1137\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1136\snext1137 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203;} +{\s1138\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1138 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204;} +{\s1139\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1138\snext1139 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204;} +{\s1140\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1140 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205;} +{\s1141\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1140\snext1141 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205;} +{\s1142\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1142 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206;} +{\s1143\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1142\snext1143 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206;} +{\s1144\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1144 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207;} +{\s1145\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1144\snext1145 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207;} +{\s1146\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1146 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208;} +{\s1147\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1146\snext1147 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208;} +{\s1148\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1148 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209;} +{\s1149\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1148\snext1149 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209;} +{\s1150\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1150 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210;} +{\s1151\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1150\snext1151 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210;} +{\s1152\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1152 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211;} +{\s1153\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1152\snext1153 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211;} +{\s1154\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1154 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212;} +{\s1155\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1154\snext1155 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212;} +{\s1156\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1156 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213;} +{\s1157\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1156\snext1157 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213;} +{\s1158\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1158 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214;} +{\s1159\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1158\snext1159 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214;} +{\s1160\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1160 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215;} +{\s1161\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1160\snext1161 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215;} +{\s1162\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1162 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216;} +{\s1163\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1162\snext1163 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216;} +{\s1164\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1164 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217;} +{\s1165\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1164\snext1165 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217;} +{\s1166\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1166 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218;} +{\s1167\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1166\snext1167 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218;} +{\s1168\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1168 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219;} +{\s1169\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1168\snext1169 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219;} +{\s1170\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1170 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220;} +{\s1171\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1170\snext1171 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220;} +{\s1172\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1172 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221;} +{\s1173\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1172\snext1173 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221;} +{\s1174\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1174 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222;} +{\s1175\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1174\snext1175 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222;} +{\s1176\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1176 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223;} +{\s1177\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1176\snext1177 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223;} +{\s1178\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1178 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224;} +{\s1179\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1178\snext1179 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224;} +{\s1180\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1180 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225;} +{\s1181\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1180\snext1181 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225;} +{\s1182\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1182 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226;} +{\s1183\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1182\snext1183 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226;} +{\s1184\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1184 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227;} +{\s1185\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1184\snext1185 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227;} +{\s1186\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1186 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228;} +{\s1187\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1186\snext1187 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228;} +{\s1188\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1188 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229;} +{\s1189\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1188\snext1189 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229;} +{\s1190\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1190 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230;} +{\s1191\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1190\snext1191 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230;} +{\s1192\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1192 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231;} +{\s1193\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1192\snext1193 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231;} +{\s1194\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1194 WW-Table Contents123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232;} +{\s1195\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1194\snext1195 WW-Table Heading123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232;} +{\s1196\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033\sbasedon1\snext1196 Table Contents;} +{\s1197\qc\rtlch\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\fs16\lang1033\b\loch\fs16\lang1033\b\sbasedon1196\snext1197 Table Heading;} +{\*\cs1199\cf2\ul\ulc0\rtlch\af1\afs24\lang255\ltrch\dbch\af1\langfe255\hich\f1\fs24\lang2060\loch\f1\fs24\lang2060 Internet link;} } {\info{\creatim\yr2009\mo3\dy25\hr14\min37}{\revtim\yr1601\mo1\dy1\hr0\min0}{\printim\yr1601\mo1\dy1\hr0\min0}{\comment StarWriter}{\vern3000}}\deftab720 {\*\pgdsctbl {\pgdsc0\pgdscuse195\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;} {\pgdsc1\pgdscuse195\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn567\margtsxn567\margbsxn567\pgdscnxt1 HTML;}} {\*\pgdscno0}\paperh16837\paperw11905\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc -\pard\plain \ltrpar\s714\sb240\sa60\keepn\ql\rtlch\afs24\lang255\ab\ltrch\dbch\langfe1033\hich\fs24\lang1033\b\loch\fs24\lang1033\b {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b Pod test plan} +\pard\plain \ltrpar\s726\sb240\sa60\keepn\ql\rtlch\afs24\lang255\ab\ltrch\dbch\langfe1033\hich\fs24\lang1033\b\loch\fs24\lang1033\b {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b Pod test plan} \par \pard\plain \ltrpar\s1\ql\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033 {\rtlch \ltrch\loch\f1\fs16\lang1033\i0\b0 This document describes the integration test plan for POD. Be careful: this test plan is executable! So do not modify the tables without having knowledge of Tester.py, the program that uses this document for executing tests.} -\par \pard\plain \ltrpar\s715\li0\ri181\lin0\rin181\fi0\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b Configuration} +\par \pard\plain \ltrpar\s727\li0\ri181\lin0\rin181\fi0\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b Configuration} \par \trowd\trql\trpaddft3\trpaddt0\trpaddfl3\trpaddl57\trpaddfb3\trpaddb0\trpaddfr3\trpaddr57\clbrdrt\brdrs\brdrw1\brdrcf1\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat3\cellx9637 -\pard\intbl\pard\plain \intbl\ltrpar\s1006\qc\rtlch\af9\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\b\loch\f9\fs16\lang1033\b {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b Configuration} +\pard\intbl\pard\plain \intbl\ltrpar\s1018\qc\rtlch\af9\afs16\lang255\ab\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\b\loch\f9\fs16\lang1033\b {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b Configuration} \cell\row\pard \trowd\trql\trpaddft3\trpaddt0\trpaddfl3\trpaddl57\trpaddfb3\trpaddb0\trpaddfr3\trpaddr57\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clcbpat4\cellx4818\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat4\cellx9637 -\pard\intbl\pard\plain \intbl\ltrpar\s1006\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 key} -\cell\pard\plain \intbl\ltrpar\s1006\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 value} +\pard\intbl\pard\plain \intbl\ltrpar\s1018\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 key} +\cell\pard\plain \intbl\ltrpar\s1018\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 value} \cell\row\pard \trowd\trql\trpaddft3\trpaddt0\trpaddfl3\trpaddl57\trpaddfb3\trpaddb0\trpaddfr3\trpaddr57\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx4818\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 -\pard\intbl\pard\plain \intbl\ltrpar\s1006\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 ooPort} -\cell\pard\plain \intbl\ltrpar\s1006\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 2002} +\pard\intbl\pard\plain \intbl\ltrpar\s1018\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 ooPort} +\cell\pard\plain \intbl\ltrpar\s1018\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 2002} \cell\row\pard \trowd\trql\trpaddft3\trpaddt0\trpaddfl3\trpaddl57\trpaddfb3\trpaddb0\trpaddfr3\trpaddr57\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx4818\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 -\pard\intbl\pard\plain \intbl\ltrpar\s1006\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 pythonWithUnoPath} -\cell\pard\plain \intbl\ltrpar\s1006\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 /usr/bin/python} +\pard\intbl\pard\plain \intbl\ltrpar\s1018\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 pythonWithUnoPath} +\cell\pard\plain \intbl\ltrpar\s1018\ql\rtlch\af9\afs16\lang255\ltrch\dbch\langfe1033\hich\f9\fs16\lang1033\loch\f9\fs16\lang1033 {\rtlch \ltrch\loch\f9\fs16\lang1033\i0\b0 /usr/bin/python} \cell\row\pard \pard\plain \ltrpar\s1\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b \par \pard\plain \ltrpar\s1\ql\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b Abstract tables} \par \pard\plain \ltrpar\s1\ql\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033 {\rtlch \ltrch\loch\f1\fs16\lang1033\i0\b0 The table {\*\bkmkstart DDE_LINK1}below represents any test.{\*\bkmkend DDE_LINK1}} @@ -1254,7 +1274,7 @@ \cell\row\pard \trowd\trql\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx1994\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 {\*\bkmkstart DDE_LINK4}PodImports{\*\bkmkend DDE_LINK4}} \cell\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 Tests the import of documents into a pod template.} -\cell\row\pard \pard\plain \ltrpar\s715\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodNominal} +\cell\row\pard \pard\plain \ltrpar\s727\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodNominal} \par \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrt\brdrs\brdrw1\brdrcf1\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat5\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ab\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\b\loch\f10\fs16\lang1033\b {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b PodNominal.descriptions} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 @@ -1335,6 +1355,9 @@ \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 varDef} \cell\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 Defines variables in 'do \'85 with' statements.} +\cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 +\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 chart1} +\cell\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 Renders a simple chart.} \cell\row\pard \pard\plain \ltrpar\s1\ql\rtlch\af10\afs16\lang255\ab\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\b\loch\f10\fs16\lang1033\b \par \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrt\brdrs\brdrw1\brdrcf1\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat3\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ab\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\b\loch\f10\fs16\lang1033\b {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b PodNominal.data(AnyTest{\*\bkmkstart DDE_LINK2}{\*\bkmkend DDE_LINK2})} @@ -1439,10 +1462,14 @@ \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 ElseStatements} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 ElseStatements} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx5987\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 -\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 varDef} +\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 {\*\bkmkstart DDE_LINK8}{\*\bkmkend DDE_LINK8}varDef} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 VarStatements} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 VarStatements} -\cell\row\pard \pard\plain \ltrpar\s715\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodXhtml} +\cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx5987\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 +\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 chart1} +\cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 Chart1} +\cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 Chart1} +\cell\row\pard \pard\plain \ltrpar\s727\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodXhtml} \par \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrt\brdrs\brdrw1\brdrcf1\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat5\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ab\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\b\loch\f10\fs16\lang1033\b {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b PodXhtml.descriptions} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 @@ -1553,7 +1580,7 @@ e).} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 XhtmlSimple} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 XhtmlWithStyle} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 -\cell\row\pard \pard\plain \ltrpar\s715\sb240\sa60\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodErrorsInTemplate} +\cell\row\pard \pard\plain \ltrpar\s727\sb240\sa60\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodErrorsInTemplate} \par \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrt\brdrs\brdrw1\brdrcf1\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat5\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ab\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\b\loch\f10\fs16\lang1033\b {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b PodErrorsInTemplate.descriptions} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 @@ -1636,7 +1663,7 @@ e).} \pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 ifElseErrors} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 IfElseErrors} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 Empty} -\cell\row\pard \pard\plain \ltrpar\s715\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodErrors} +\cell\row\pard \pard\plain \ltrpar\s727\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodErrors} \par \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrt\brdrs\brdrw1\brdrcf1\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat5\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ab\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\b\loch\f10\fs16\lang1033\b {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b PodErrors.descriptions} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 @@ -1732,7 +1759,7 @@ e).} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 'b': 'Text body'} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 "} \cell\pard\plain \intbl\ltrpar\s1\ql\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033 {\rtlch \ltrch\loch\f1\fs16\lang1033\i0\b0 you must associate an OpenDocument "text" style} -\cell\row\pard \pard\plain \ltrpar\s715\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodImports} +\cell\row\pard \pard\plain \ltrpar\s727\sb240\sa60\keepn\ql\rtlch\afs20\lang255\ai\ab\ltrch\dbch\langfe1033\hich\fs20\lang1033\i\b\loch\fs20\lang1033\i\b {\rtlch \ltrch\loch\f1\fs20\lang1033\i\b PodImports} \par \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrt\brdrs\brdrw1\brdrcf1\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\clcbpat5\cellx9637 \pard\intbl\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ab\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\b\loch\f10\fs16\lang1033\b {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b {\*\bkmkstart DDE_LINK6}PodImports{\*\bkmkend DDE_LINK6}.descriptions} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 @@ -1755,11 +1782,11 @@ e).} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ai\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\i\loch\f10\fs16\lang1033\i {\rtlch \ltrch\loch\f10\fs16\lang1033\i\b0 Template} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ai\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\i\loch\f10\fs16\lang1033\i {\rtlch \ltrch\loch\f10\fs16\lang1033\i\b0 Context} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx5987\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 -\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 pathImport} +\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 _pathImport} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 PathImport} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 PathImport} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx5987\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 -\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 fileHandlerImport} +\pard\intbl\pard\plain \intbl\ltrpar\s1\ql\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 _fileHandlerImport} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 FileHandlerImport} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 FileHandlerImport} \cell\row\pard \trowd\trqc\trpaddft3\trpaddt0\trpaddfl3\trpaddl108\trpaddfb3\trpaddb0\trpaddfr3\trpaddr108\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx2195\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\cellx5987\clbrdrl\brdrs\brdrw1\brdrcf1\clbrdrb\brdrs\brdrw1\brdrcf1\clbrdrr\brdrs\brdrw1\brdrcf1\cellx9637 @@ -1768,5 +1795,5 @@ e).} \cell\pard\plain \intbl\ltrpar\s1\qc\rtlch\af10\afs16\lang255\ltrch\dbch\af10\langfe1033\hich\f10\fs16\lang1033\loch\f10\fs16\lang1033 {\rtlch \ltrch\loch\f10\fs16\lang1033\i0\b0 ImagesImport} \cell\row\pard \pard\plain \ltrpar\s1\ql\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033 \par \pard\plain \ltrpar\s1\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033 {\rtlch \ltrch\loch\f1\fs16\lang1033\i0\b0 For the moment, the test {\rtlch\ltrch\hich\b\loch\b imagesImport} does not work, because in an error message the full path to the Python interpreter is included in the ODT result. Of course, from one machine to the other, this may change, so it breaks the test...} -\par \pard\plain \ltrpar\s1\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033 {\rtlch \ltrch\loch\f1\fs16\lang1033\i0\b0 Moreover , 2 additional tests require OO to run on port 2002. If it is not the case, the 2 tests will fail.} +\par \pard\plain \ltrpar\s1\rtlch\afs16\lang255\ltrch\dbch\langfe1033\hich\fs16\lang1033\loch\fs16\lang1033 {\rtlch \ltrch\loch\f1\fs16\lang1033\i0\b0 Moreover , tests pathImport and fileHandlerImport will probably fail too because they include absolute pat in error messages, so they are deployment-dependent.} \par } \ No newline at end of file diff --git a/pod/test/contexts/Chart1.py b/pod/test/contexts/Chart1.py new file mode 100644 index 0000000..9bfa770 --- /dev/null +++ b/pod/test/contexts/Chart1.py @@ -0,0 +1,5 @@ +johnScore = 25 +markScore = 53 +wilsonScore = 12 +meghuScore = 59 + diff --git a/pod/test/results/chart1.odt b/pod/test/results/chart1.odt new file mode 100644 index 0000000..d69a204 Binary files /dev/null and b/pod/test/results/chart1.odt differ diff --git a/pod/test/templates/Chart1.odt b/pod/test/templates/Chart1.odt new file mode 100644 index 0000000..ff4c44c Binary files /dev/null and b/pod/test/templates/Chart1.odt differ diff --git a/shared/__init__.py b/shared/__init__.py index 23e6180..b7dc15e 100644 --- a/shared/__init__.py +++ b/shared/__init__.py @@ -18,7 +18,7 @@ mimeTypesExts = { 'image/jpeg' : 'jpg', 'image/gif' : 'gif' } -xmlPrologue = '' +xmlPrologue = '\n' # ------------------------------------------------------------------------------ class UnmarshalledObject: diff --git a/shared/odf.py b/shared/odf.py new file mode 100644 index 0000000..ff009b0 --- /dev/null +++ b/shared/odf.py @@ -0,0 +1,58 @@ +'''This module contains some useful classes for constructing ODF documents + programmatically.''' + +# ------------------------------------------------------------------------------ +class OdtTable: + '''This class allows to construct an ODT table programmatically.''' + # Some namespace definitions + tns = 'table:' + txns = 'text:' + + def __init__(self, tableName, paraStyle, cellStyle, + paraHeaderStyle, cellHeaderStyle, nbOfCols): + self.tableName = tableName + self.paraStyle = paraStyle + self.cellStyle = cellStyle + self.paraHeaderStyle = paraHeaderStyle + self.cellHeaderStyle = cellHeaderStyle + self.nbOfCols = nbOfCols + self.res = '' + + def dumpCell(self, content, span=1, header=False): + if header: + paraStyleName = self.paraHeaderStyle + cellStyleName = self.cellHeaderStyle + else: + paraStyleName = self.paraStyle + cellStyleName = self.cellStyle + self.res += '<%stable-cell %sstyle-name="%s" ' \ + '%snumber-columns-spanned="%d">' % \ + (self.tns, self.tns, cellStyleName, self.tns, span) + self.res += '<%sp %sstyle-name="%s">%s' % \ + (self.txns, self.txns, paraStyleName, content, self.txns) + self.res += '' % self.tns + + def startRow(self): + self.res += '<%stable-row>' % self.tns + + def endRow(self): + self.res += '' % self.tns + + def startTable(self): + self.res += '<%stable %sname="AnalysisTable">' % (self.tns, self.tns) + self.res += '<%stable-column %snumber-columns-repeated="%d"/>' % \ + (self.tns, self.tns, self.nbOfCols) + + def endTable(self): + self.res += '' % self.tns + + def dumpFloat(self, number): + return str(round(number, 2)) + + def get(self): + '''Returns the whole table.''' + self.startTable() + self.getRows() + self.endTable() + return self.res.decode('utf-8') +# ------------------------------------------------------------------------------ diff --git a/shared/xml_parser.py b/shared/xml_parser.py index f323a15..6a5b005 100644 --- a/shared/xml_parser.py +++ b/shared/xml_parser.py @@ -526,8 +526,7 @@ class XmlMarshaller: mustDump = True if mustDump: self.dumpField(res, fieldName, fieldValue) - elif objectType in ('archetype', 'appy'): - fields = instance.schema.fields() + elif objectType == 'archetype': for field in instance.schema.fields(): # Dump only needed fields mustDump = False @@ -550,18 +549,32 @@ class XmlMarshaller: fieldType = 'ref' self.dumpField(res, field.getName(),field.get(instance), fieldType=fieldType) - if objectType == 'appy': - # Dump the object history. - res.write('') - wfInfo = instance.portal_workflow.getWorkflowsFor(instance) - if wfInfo: - history = instance.workflow_history[wfInfo[0].id] - for event in history: - res.write('') - for k, v in event.iteritems(): - self.dumpField(res, k, v) - res.write('') - res.write('') + elif objectType == 'appy': + for field in instance.getAllAppyTypes(): + # Dump only needed fields + if field.name in self.fieldsToExclude: continue + if (field.type == 'Ref') and field.isBack: continue + if (type(self.fieldsToMarshall) in self.sequenceTypes) \ + and (field.name not in self.fieldsToMarshall): continue + # Determine field type + fieldType = 'basic' + if field.type == 'File': + fieldType = 'file' + elif field.type == 'Ref': + fieldType = 'ref' + self.dumpField(res, field.name,field.getValue(instance), + fieldType=fieldType) + # Dump the object history. + res.write('') + wfInfo = instance.portal_workflow.getWorkflowsFor(instance) + if wfInfo: + history = instance.workflow_history[wfInfo[0].id] + for event in history: + res.write('') + for k, v in event.iteritems(): + self.dumpField(res, k, v) + res.write('') + res.write('') self.marshallSpecificElements(instance, res) res.write('') else: