{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,99 +1,99 @@\n-Zip file size: 265969 bytes, number of entries: 97\n+Zip file size: 272000 bytes, number of entries: 97\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat     3296 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n -rw----     2.0 fat    11358 bX stor 70-Jan-01 00:00 META-INF/LICENSE\n -rw----     2.0 fat       25 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat      175 bX stor 70-Jan-01 00:00 META-INF/NOTICE\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/internal/\n -rw----     2.0 fat       61 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataParamsFilter\n -rw----     2.0 fat       71 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping\n--rw----     2.0 fat      275 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\n--rw----     2.0 fat      715 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor\n--rw----     2.0 fat      182 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver\n+-rw----     2.0 fat      278 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\n+-rw----     2.0 fat      724 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor\n+-rw----     2.0 fat      184 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.properties\n--rw----     2.0 fat     3058 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.xml\n+-rw----     2.0 fat     2977 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.xml\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/\n--rw----     2.0 fat     2647 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java\n--rw----     2.0 fat     4111 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java\n--rw----     2.0 fat     1266 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MappingChangedEvent.java\n--rw----     2.0 fat      920 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MappingListener.java\n--rw----     2.0 fat     1244 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataChangeListener.java\n--rw----     2.0 fat     1583 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataConstants.java\n--rw----     2.0 fat    14972 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataInfo.java\n--rw----     2.0 fat     1213 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataParamsFilter.java\n--rw----     2.0 fat    10777 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataService.java\n--rw----     2.0 fat     3084 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataServiceExporter.java\n--rw----     2.0 fat     2236 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataServiceType.java\n--rw----     2.0 fat     2049 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/RevisionResolver.java\n--rw----     2.0 fat     2905 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/ServiceNameMapping.java\n--rw----     2.0 fat     2647 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/WritableMetadataService.java\n+-rw----     2.0 fat     2702 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java\n+-rw----     2.0 fat     4214 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java\n+-rw----     2.0 fat     1307 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MappingChangedEvent.java\n+-rw----     2.0 fat      941 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MappingListener.java\n+-rw----     2.0 fat     1279 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataChangeListener.java\n+-rw----     2.0 fat     1613 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataConstants.java\n+-rw----     2.0 fat    15421 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataInfo.java\n+-rw----     2.0 fat     1250 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataParamsFilter.java\n+-rw----     2.0 fat    11050 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataService.java\n+-rw----     2.0 fat     3184 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataServiceExporter.java\n+-rw----     2.0 fat     2308 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/MetadataServiceType.java\n+-rw----     2.0 fat     2108 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/RevisionResolver.java\n+-rw----     2.0 fat     2977 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/ServiceNameMapping.java\n+-rw----     2.0 fat     2734 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/WritableMetadataService.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/\n--rw----     2.0 fat     2624 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.java\n--rw----     2.0 fat     3861 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java\n--rw----     2.0 fat     3314 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java\n+-rw----     2.0 fat     2702 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.java\n+-rw----     2.0 fat     3968 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java\n+-rw----     2.0 fat     3402 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/\n--rw----     2.0 fat     1723 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java\n--rw----     2.0 fat     2765 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java\n--rw----     2.0 fat     2488 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java\n--rw----     2.0 fat     1947 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java\n--rw----     2.0 fat     3137 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java\n--rw----     2.0 fat     1443 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/TypeBuilder.java\n+-rw----     2.0 fat     1771 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java\n+-rw----     2.0 fat     2835 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java\n+-rw----     2.0 fat     2558 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java\n+-rw----     2.0 fat     2005 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java\n+-rw----     2.0 fat     3217 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java\n+-rw----     2.0 fat     1485 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/builder/TypeBuilder.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/\n--rw----     2.0 fat     1383 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java\n--rw----     2.0 fat     3145 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/MethodDefinition.java\n--rw----     2.0 fat     3015 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/ServiceDefinition.java\n--rw----     2.0 fat     5307 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/TypeDefinition.java\n+-rw----     2.0 fat     1426 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java\n+-rw----     2.0 fat     3245 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/MethodDefinition.java\n+-rw----     2.0 fat     3116 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/ServiceDefinition.java\n+-rw----     2.0 fat     5496 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/model/TypeDefinition.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/util/\n--rw----     2.0 fat     3495 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/util/ClassUtils.java\n--rw----     2.0 fat     3303 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java\n+-rw----     2.0 fat     3606 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/util/ClassUtils.java\n+-rw----     2.0 fat     3405 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/\n--rw----     2.0 fat     2918 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/MetadataReport.java\n--rw----     2.0 fat     1120 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/MetadataReportFactory.java\n--rw----     2.0 fat     3594 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/MetadataReportInstance.java\n+-rw----     2.0 fat     2995 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/MetadataReport.java\n+-rw----     2.0 fat     1150 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/MetadataReportFactory.java\n+-rw----     2.0 fat     3680 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/MetadataReportInstance.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/\n--rw----     2.0 fat     2269 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java\n--rw----     2.0 fat      980 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java\n--rw----     2.0 fat     3170 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java\n--rw----     2.0 fat     2077 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.java\n--rw----     2.0 fat     3194 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java\n--rw----     2.0 fat     3134 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java\n--rw----     2.0 fat     2161 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java\n+-rw----     2.0 fat     2332 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java\n+-rw----     2.0 fat     1005 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java\n+-rw----     2.0 fat     3258 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java\n+-rw----     2.0 fat     2139 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.java\n+-rw----     2.0 fat     3299 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java\n+-rw----     2.0 fat     3219 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java\n+-rw----     2.0 fat     2231 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/support/\n--rw----     2.0 fat    20351 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java\n--rw----     2.0 fat     2627 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java\n--rw----     2.0 fat     1286 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/support/Constants.java\n+-rw----     2.0 fat    20819 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java\n+-rw----     2.0 fat     2689 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java\n+-rw----     2.0 fat     1322 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/report/support/Constants.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/\n--rw----     2.0 fat     2415 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java\n--rw----     2.0 fat    15751 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java\n--rw----     2.0 fat     2501 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java\n--rw----     2.0 fat     3335 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java\n--rw----     2.0 fat     1987 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.java\n--rw----     2.0 fat     7024 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/RequestMetadata.java\n--rw----     2.0 fat     4619 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/RestMetadataConstants.java\n--rw----     2.0 fat     6158 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/RestMethodMetadata.java\n--rw----     2.0 fat     3195 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ServiceRestMetadata.java\n--rw----     2.0 fat     1217 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java\n--rw----     2.0 fat     1596 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java\n+-rw----     2.0 fat     2466 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java\n+-rw----     2.0 fat    16094 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java\n+-rw----     2.0 fat     2567 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java\n+-rw----     2.0 fat     3417 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java\n+-rw----     2.0 fat     2046 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.java\n+-rw----     2.0 fat     7250 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/RequestMetadata.java\n+-rw----     2.0 fat     4764 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/RestMetadataConstants.java\n+-rw----     2.0 fat     6357 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/RestMethodMetadata.java\n+-rw----     2.0 fat     3302 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ServiceRestMetadata.java\n+-rw----     2.0 fat     1256 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java\n+-rw----     2.0 fat     1639 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/\n--rw----     2.0 fat     2887 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java\n--rw----     2.0 fat     1344 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java\n--rw----     2.0 fat     2162 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java\n--rw----     2.0 fat     4582 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n--rw----     2.0 fat     1352 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java\n--rw----     2.0 fat     1758 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java\n--rw----     2.0 fat     1348 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java\n+-rw----     2.0 fat     2961 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java\n+-rw----     2.0 fat     1378 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java\n+-rw----     2.0 fat     2211 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java\n+-rw----     2.0 fat     4681 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n+-rw----     2.0 fat     1386 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java\n+-rw----     2.0 fat     1796 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java\n+-rw----     2.0 fat     1382 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/\n--rw----     2.0 fat     2864 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n--rw----     2.0 fat     1797 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java\n--rw----     2.0 fat     1792 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java\n--rw----     2.0 fat     6256 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n+-rw----     2.0 fat     2935 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n+-rw----     2.0 fat     1840 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java\n+-rw----     2.0 fat     1835 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java\n+-rw----     2.0 fat     6397 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/store/\n--rw----     2.0 fat     4202 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java\n-97 files, 244843 bytes uncompressed, 244843 bytes compressed:  0.0%\n+-rw----     2.0 fat     4302 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java\n+97 files, 250874 bytes uncompressed, 250874 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -250,5223 +250,5223 @@\n #\n 03DB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 03DBB   Length              0005 (5)\n 03DBD   Flags               01 (1) 'Modification'\n 03DBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 03DC2 PAYLOAD\n \n-03ED5 DATA DESCRIPTOR       08074B50 (134695760)\n-03ED9 CRC                   D03529EC (3493145068)\n-03EDD Compressed Size       00000113 (275)\n-03EE1 Uncompressed Size     00000113 (275)\n-\n-03EE5 LOCAL HEADER #11      04034B50 (67324752)\n-03EE9 Extract Zip Spec      14 (20) '2.0'\n-03EEA Extract OS            00 (0) 'MS-DOS'\n-03EEB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-03EED Compression Method    0000 (0) 'Stored'\n-03EEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03EF3 CRC                   00000000 (0)\n-03EF7 Compressed Size       00000000 (0)\n-03EFB Uncompressed Size     00000000 (0)\n-03EFF Filename Length       0058 (88)\n-03F01 Extra Length          0009 (9)\n-03F03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03F5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03F5D   Length              0005 (5)\n-03F5F   Flags               01 (1) 'Modification'\n-03F60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03F64 PAYLOAD\n-\n-0422F DATA DESCRIPTOR       08074B50 (134695760)\n-04233 CRC                   0C0A9CCA (202022090)\n-04237 Compressed Size       000002CB (715)\n-0423B Uncompressed Size     000002CB (715)\n-\n-0423F LOCAL HEADER #12      04034B50 (67324752)\n-04243 Extract Zip Spec      14 (20) '2.0'\n-04244 Extract OS            00 (0) 'MS-DOS'\n-04245 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-04247 Compression Method    0000 (0) 'Stored'\n-04249 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0424D CRC                   00000000 (0)\n-04251 Compressed Size       00000000 (0)\n-04255 Uncompressed Size     00000000 (0)\n-04259 Filename Length       0052 (82)\n-0425B Extra Length          0009 (9)\n-0425D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x425D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-042AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042B1   Length              0005 (5)\n-042B3   Flags               01 (1) 'Modification'\n-042B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-042B8 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-0436E DATA DESCRIPTOR       08074B50 (134695760)\n-04372 CRC                   CCA3FD93 (3433299347)\n-04376 Compressed Size       000000B6 (182)\n-0437A Uncompressed Size     000000B6 (182)\n-\n-0437E LOCAL HEADER #13      04034B50 (67324752)\n-04382 Extract Zip Spec      14 (20) '2.0'\n-04383 Extract OS            00 (0) 'MS-DOS'\n-04384 General Purpose Flag  0000 (0)\n-04386 Compression Method    0000 (0) 'Stored'\n-04388 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0438C CRC                   00000000 (0)\n-04390 Compressed Size       00000000 (0)\n-04394 Uncompressed Size     00000000 (0)\n-04398 Filename Length       000F (15)\n-0439A Extra Length          0009 (9)\n-0439C Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x439C: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-043AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-043AD   Length              0005 (5)\n-043AF   Flags               01 (1) 'Modification'\n-043B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-043B4 LOCAL HEADER #14      04034B50 (67324752)\n-043B8 Extract Zip Spec      14 (20) '2.0'\n-043B9 Extract OS            00 (0) 'MS-DOS'\n-043BA General Purpose Flag  0000 (0)\n-043BC Compression Method    0000 (0) 'Stored'\n-043BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-043C2 CRC                   00000000 (0)\n-043C6 Compressed Size       00000000 (0)\n-043CA Uncompressed Size     00000000 (0)\n-043CE Filename Length       0020 (32)\n-043D0 Extra Length          0009 (9)\n-043D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x43D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-043F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-043F4   Length              0005 (5)\n-043F6   Flags               01 (1) 'Modification'\n-043F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-043FB LOCAL HEADER #15      04034B50 (67324752)\n-043FF Extract Zip Spec      14 (20) '2.0'\n-04400 Extract OS            00 (0) 'MS-DOS'\n-04401 General Purpose Flag  0000 (0)\n-04403 Compression Method    0000 (0) 'Stored'\n-04405 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04409 CRC                   00000000 (0)\n-0440D Compressed Size       00000000 (0)\n-04411 Uncompressed Size     00000000 (0)\n-04415 Filename Length       0033 (51)\n-04417 Extra Length          0009 (9)\n-04419 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4419: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0444C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0444E   Length              0005 (5)\n-04450   Flags               01 (1) 'Modification'\n-04451   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04455 LOCAL HEADER #16      04034B50 (67324752)\n-04459 Extract Zip Spec      14 (20) '2.0'\n-0445A Extract OS            00 (0) 'MS-DOS'\n-0445B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0445D Compression Method    0000 (0) 'Stored'\n-0445F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04463 CRC                   00000000 (0)\n-04467 Compressed Size       00000000 (0)\n-0446B Uncompressed Size     00000000 (0)\n-0446F Filename Length       0041 (65)\n-04471 Extra Length          0009 (9)\n-04473 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4473: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044B6   Length              0005 (5)\n-044B8   Flags               01 (1) 'Modification'\n-044B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044BD DATA DESCRIPTOR       08074B50 (134695760)\n-044C1 CRC                   00000000 (0)\n-044C5 Compressed Size       00000000 (0)\n-044C9 Uncompressed Size     00000000 (0)\n-\n-044CD LOCAL HEADER #17      04034B50 (67324752)\n-044D1 Extract Zip Spec      14 (20) '2.0'\n-044D2 Extract OS            00 (0) 'MS-DOS'\n-044D3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-044D5 Compression Method    0000 (0) 'Stored'\n-044D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044DB CRC                   00000000 (0)\n-044DF Compressed Size       00000000 (0)\n-044E3 Uncompressed Size     00000000 (0)\n-044E7 Filename Length       003A (58)\n-044E9 Extra Length          0009 (9)\n-044EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04525 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04527   Length              0005 (5)\n-04529   Flags               01 (1) 'Modification'\n-0452A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0452E PAYLOAD\n-\n-05120 DATA DESCRIPTOR       08074B50 (134695760)\n-05124 CRC                   364739E6 (910637542)\n-05128 Compressed Size       00000BF2 (3058)\n-0512C Uncompressed Size     00000BF2 (3058)\n-\n-05130 LOCAL HEADER #18      04034B50 (67324752)\n-05134 Extract Zip Spec      14 (20) '2.0'\n-05135 Extract OS            00 (0) 'MS-DOS'\n-05136 General Purpose Flag  0000 (0)\n-05138 Compression Method    0000 (0) 'Stored'\n-0513A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0513E CRC                   00000000 (0)\n-05142 Compressed Size       00000000 (0)\n-05146 Uncompressed Size     00000000 (0)\n-0514A Filename Length       0004 (4)\n-0514C Extra Length          0009 (9)\n-0514E Filename              'XXXX'\n-#\n-# WARNING: Offset 0x514E: Filename 'XXXX'\n-#          Zero length filename\n-#\n-05152 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05154   Length              0005 (5)\n-05156   Flags               01 (1) 'Modification'\n-05157   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0515B LOCAL HEADER #19      04034B50 (67324752)\n-0515F Extract Zip Spec      14 (20) '2.0'\n-05160 Extract OS            00 (0) 'MS-DOS'\n-05161 General Purpose Flag  0000 (0)\n-05163 Compression Method    0000 (0) 'Stored'\n-05165 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05169 CRC                   00000000 (0)\n-0516D Compressed Size       00000000 (0)\n-05171 Uncompressed Size     00000000 (0)\n-05175 Filename Length       000B (11)\n-05177 Extra Length          0009 (9)\n-05179 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5179: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05184 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05186   Length              0005 (5)\n-05188   Flags               01 (1) 'Modification'\n-05189   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0518D LOCAL HEADER #20      04034B50 (67324752)\n-05191 Extract Zip Spec      14 (20) '2.0'\n-05192 Extract OS            00 (0) 'MS-DOS'\n-05193 General Purpose Flag  0000 (0)\n-05195 Compression Method    0000 (0) 'Stored'\n-05197 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0519B CRC                   00000000 (0)\n-0519F Compressed Size       00000000 (0)\n-051A3 Uncompressed Size     00000000 (0)\n-051A7 Filename Length       0011 (17)\n-051A9 Extra Length          0009 (9)\n-051AB Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51AB: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-051BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051BE   Length              0005 (5)\n-051C0   Flags               01 (1) 'Modification'\n-051C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-051C5 LOCAL HEADER #21      04034B50 (67324752)\n-051C9 Extract Zip Spec      14 (20) '2.0'\n-051CA Extract OS            00 (0) 'MS-DOS'\n-051CB General Purpose Flag  0000 (0)\n-051CD Compression Method    0000 (0) 'Stored'\n-051CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051D3 CRC                   00000000 (0)\n-051D7 Compressed Size       00000000 (0)\n-051DB Uncompressed Size     00000000 (0)\n-051DF Filename Length       001A (26)\n-051E1 Extra Length          0009 (9)\n-051E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-051FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051FF   Length              0005 (5)\n-05201   Flags               01 (1) 'Modification'\n-05202   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05206 LOCAL HEADER #22      04034B50 (67324752)\n-0520A Extract Zip Spec      14 (20) '2.0'\n-0520B Extract OS            00 (0) 'MS-DOS'\n-0520C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0520E Compression Method    0000 (0) 'Stored'\n-05210 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05214 CRC                   00000000 (0)\n-05218 Compressed Size       00000000 (0)\n-0521C Uncompressed Size     00000000 (0)\n-05220 Filename Length       003A (58)\n-05222 Extra Length          0009 (9)\n-05224 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5224: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0525E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05260   Length              0005 (5)\n-05262   Flags               01 (1) 'Modification'\n-05263   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05267 PAYLOAD\n-\n-05CBE DATA DESCRIPTOR       08074B50 (134695760)\n-05CC2 CRC                   CF6AE7CA (3479889866)\n-05CC6 Compressed Size       00000A57 (2647)\n-05CCA Uncompressed Size     00000A57 (2647)\n-\n-05CCE LOCAL HEADER #23      04034B50 (67324752)\n-05CD2 Extract Zip Spec      14 (20) '2.0'\n-05CD3 Extract OS            00 (0) 'MS-DOS'\n-05CD4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-05CD6 Compression Method    0000 (0) 'Stored'\n-05CD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05CDC CRC                   00000000 (0)\n-05CE0 Compressed Size       00000000 (0)\n-05CE4 Uncompressed Size     00000000 (0)\n-05CE8 Filename Length       0045 (69)\n-05CEA Extra Length          0009 (9)\n-05CEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5CEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05D31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05D33   Length              0005 (5)\n-05D35   Flags               01 (1) 'Modification'\n-05D36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05D3A PAYLOAD\n-\n-06D49 DATA DESCRIPTOR       08074B50 (134695760)\n-06D4D CRC                   462DB2DF (1177400031)\n-06D51 Compressed Size       0000100F (4111)\n-06D55 Uncompressed Size     0000100F (4111)\n-\n-06D59 LOCAL HEADER #24      04034B50 (67324752)\n-06D5D Extract Zip Spec      14 (20) '2.0'\n-06D5E Extract OS            00 (0) 'MS-DOS'\n-06D5F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-06D61 Compression Method    0000 (0) 'Stored'\n-06D63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D67 CRC                   00000000 (0)\n-06D6B Compressed Size       00000000 (0)\n-06D6F Uncompressed Size     00000000 (0)\n-06D73 Filename Length       0032 (50)\n-06D75 Extra Length          0009 (9)\n-06D77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06DA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06DAB   Length              0005 (5)\n-06DAD   Flags               01 (1) 'Modification'\n-06DAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06DB2 PAYLOAD\n-\n-072A4 DATA DESCRIPTOR       08074B50 (134695760)\n-072A8 CRC                   A8E35A99 (2833472153)\n-072AC Compressed Size       000004F2 (1266)\n-072B0 Uncompressed Size     000004F2 (1266)\n-\n-072B4 LOCAL HEADER #25      04034B50 (67324752)\n-072B8 Extract Zip Spec      14 (20) '2.0'\n-072B9 Extract OS            00 (0) 'MS-DOS'\n-072BA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-072BC Compression Method    0000 (0) 'Stored'\n-072BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-072C2 CRC                   00000000 (0)\n-072C6 Compressed Size       00000000 (0)\n-072CA Uncompressed Size     00000000 (0)\n-072CE Filename Length       002E (46)\n-072D0 Extra Length          0009 (9)\n-072D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x72D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07300 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07302   Length              0005 (5)\n-07304   Flags               01 (1) 'Modification'\n-07305   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07309 PAYLOAD\n-\n-076A1 DATA DESCRIPTOR       08074B50 (134695760)\n-076A5 CRC                   ECCEFB44 (3972987716)\n-076A9 Compressed Size       00000398 (920)\n-076AD Uncompressed Size     00000398 (920)\n-\n-076B1 LOCAL HEADER #26      04034B50 (67324752)\n-076B5 Extract Zip Spec      14 (20) '2.0'\n-076B6 Extract OS            00 (0) 'MS-DOS'\n-076B7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-076B9 Compression Method    0000 (0) 'Stored'\n-076BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-076BF CRC                   00000000 (0)\n-076C3 Compressed Size       00000000 (0)\n-076C7 Uncompressed Size     00000000 (0)\n-076CB Filename Length       0035 (53)\n-076CD Extra Length          0009 (9)\n-076CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x76CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07704 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07706   Length              0005 (5)\n-07708   Flags               01 (1) 'Modification'\n-07709   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0770D PAYLOAD\n-\n-07BE9 DATA DESCRIPTOR       08074B50 (134695760)\n-07BED CRC                   7822EF2B (2015555371)\n-07BF1 Compressed Size       000004DC (1244)\n-07BF5 Uncompressed Size     000004DC (1244)\n-\n-07BF9 LOCAL HEADER #27      04034B50 (67324752)\n-07BFD Extract Zip Spec      14 (20) '2.0'\n-07BFE Extract OS            00 (0) 'MS-DOS'\n-07BFF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-07C01 Compression Method    0000 (0) 'Stored'\n-07C03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07C07 CRC                   00000000 (0)\n-07C0B Compressed Size       00000000 (0)\n-07C0F Uncompressed Size     00000000 (0)\n-07C13 Filename Length       0030 (48)\n-07C15 Extra Length          0009 (9)\n-07C17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7C17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07C47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07C49   Length              0005 (5)\n-07C4B   Flags               01 (1) 'Modification'\n-07C4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07C50 PAYLOAD\n-\n-0827F DATA DESCRIPTOR       08074B50 (134695760)\n-08283 CRC                   5CAAFB07 (1554709255)\n-08287 Compressed Size       0000062F (1583)\n-0828B Uncompressed Size     0000062F (1583)\n-\n-0828F LOCAL HEADER #28      04034B50 (67324752)\n-08293 Extract Zip Spec      14 (20) '2.0'\n-08294 Extract OS            00 (0) 'MS-DOS'\n-08295 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-08297 Compression Method    0000 (0) 'Stored'\n-08299 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0829D CRC                   00000000 (0)\n-082A1 Compressed Size       00000000 (0)\n-082A5 Uncompressed Size     00000000 (0)\n-082A9 Filename Length       002B (43)\n-082AB Extra Length          0009 (9)\n-082AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x82AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-082D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-082DA   Length              0005 (5)\n-082DC   Flags               01 (1) 'Modification'\n-082DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-082E1 PAYLOAD\n-\n-0BD5D DATA DESCRIPTOR       08074B50 (134695760)\n-0BD61 CRC                   4F1688E0 (1326876896)\n-0BD65 Compressed Size       00003A7C (14972)\n-0BD69 Uncompressed Size     00003A7C (14972)\n-\n-0BD6D LOCAL HEADER #29      04034B50 (67324752)\n-0BD71 Extract Zip Spec      14 (20) '2.0'\n-0BD72 Extract OS            00 (0) 'MS-DOS'\n-0BD73 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0BD75 Compression Method    0000 (0) 'Stored'\n-0BD77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BD7B CRC                   00000000 (0)\n-0BD7F Compressed Size       00000000 (0)\n-0BD83 Uncompressed Size     00000000 (0)\n-0BD87 Filename Length       0033 (51)\n-0BD89 Extra Length          0009 (9)\n-0BD8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBD8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BDBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BDC0   Length              0005 (5)\n-0BDC2   Flags               01 (1) 'Modification'\n-0BDC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BDC7 PAYLOAD\n-\n-0C284 DATA DESCRIPTOR       08074B50 (134695760)\n-0C288 CRC                   F33C5BFA (4080819194)\n-0C28C Compressed Size       000004BD (1213)\n-0C290 Uncompressed Size     000004BD (1213)\n-\n-0C294 LOCAL HEADER #30      04034B50 (67324752)\n-0C298 Extract Zip Spec      14 (20) '2.0'\n-0C299 Extract OS            00 (0) 'MS-DOS'\n-0C29A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0C29C Compression Method    0000 (0) 'Stored'\n-0C29E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C2A2 CRC                   00000000 (0)\n-0C2A6 Compressed Size       00000000 (0)\n-0C2AA Uncompressed Size     00000000 (0)\n-0C2AE Filename Length       002E (46)\n-0C2B0 Extra Length          0009 (9)\n-0C2B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC2B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2E2   Length              0005 (5)\n-0C2E4   Flags               01 (1) 'Modification'\n-0C2E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C2E9 PAYLOAD\n-\n-0ED02 DATA DESCRIPTOR       08074B50 (134695760)\n-0ED06 CRC                   B27D0F80 (2994540416)\n-0ED0A Compressed Size       00002A19 (10777)\n-0ED0E Uncompressed Size     00002A19 (10777)\n-\n-0ED12 LOCAL HEADER #31      04034B50 (67324752)\n-0ED16 Extract Zip Spec      14 (20) '2.0'\n-0ED17 Extract OS            00 (0) 'MS-DOS'\n-0ED18 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0ED1A Compression Method    0000 (0) 'Stored'\n-0ED1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ED20 CRC                   00000000 (0)\n-0ED24 Compressed Size       00000000 (0)\n-0ED28 Uncompressed Size     00000000 (0)\n-0ED2C Filename Length       0036 (54)\n-0ED2E Extra Length          0009 (9)\n-0ED30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xED30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ED66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ED68   Length              0005 (5)\n-0ED6A   Flags               01 (1) 'Modification'\n-0ED6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0ED6F PAYLOAD\n-\n-0F97B DATA DESCRIPTOR       08074B50 (134695760)\n-0F97F CRC                   2A67D5E8 (711448040)\n-0F983 Compressed Size       00000C0C (3084)\n-0F987 Uncompressed Size     00000C0C (3084)\n-\n-0F98B LOCAL HEADER #32      04034B50 (67324752)\n-0F98F Extract Zip Spec      14 (20) '2.0'\n-0F990 Extract OS            00 (0) 'MS-DOS'\n-0F991 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0F993 Compression Method    0000 (0) 'Stored'\n-0F995 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F999 CRC                   00000000 (0)\n-0F99D Compressed Size       00000000 (0)\n-0F9A1 Uncompressed Size     00000000 (0)\n-0F9A5 Filename Length       0032 (50)\n-0F9A7 Extra Length          0009 (9)\n-0F9A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF9A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F9DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F9DD   Length              0005 (5)\n-0F9DF   Flags               01 (1) 'Modification'\n-0F9E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F9E4 PAYLOAD\n-\n-102A0 DATA DESCRIPTOR       08074B50 (134695760)\n-102A4 CRC                   7483DD2E (1954798894)\n-102A8 Compressed Size       000008BC (2236)\n-102AC Uncompressed Size     000008BC (2236)\n-\n-102B0 LOCAL HEADER #33      04034B50 (67324752)\n-102B4 Extract Zip Spec      14 (20) '2.0'\n-102B5 Extract OS            00 (0) 'MS-DOS'\n-102B6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-102B8 Compression Method    0000 (0) 'Stored'\n-102BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-102BE CRC                   00000000 (0)\n-102C2 Compressed Size       00000000 (0)\n-102C6 Uncompressed Size     00000000 (0)\n-102CA Filename Length       002F (47)\n-102CC Extra Length          0009 (9)\n-102CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x102CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-102FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-102FF   Length              0005 (5)\n-10301   Flags               01 (1) 'Modification'\n-10302   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10306 PAYLOAD\n-\n-10B07 DATA DESCRIPTOR       08074B50 (134695760)\n-10B0B CRC                   6B4F2850 (1800349776)\n-10B0F Compressed Size       00000801 (2049)\n-10B13 Uncompressed Size     00000801 (2049)\n-\n-10B17 LOCAL HEADER #34      04034B50 (67324752)\n-10B1B Extract Zip Spec      14 (20) '2.0'\n-10B1C Extract OS            00 (0) 'MS-DOS'\n-10B1D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-10B1F Compression Method    0000 (0) 'Stored'\n-10B21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10B25 CRC                   00000000 (0)\n-10B29 Compressed Size       00000000 (0)\n-10B2D Uncompressed Size     00000000 (0)\n-10B31 Filename Length       0031 (49)\n-10B33 Extra Length          0009 (9)\n-10B35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10B35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10B66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10B68   Length              0005 (5)\n-10B6A   Flags               01 (1) 'Modification'\n-10B6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10B6F PAYLOAD\n-\n-116C8 DATA DESCRIPTOR       08074B50 (134695760)\n-116CC CRC                   065E383D (106838077)\n-116D0 Compressed Size       00000B59 (2905)\n-116D4 Uncompressed Size     00000B59 (2905)\n-\n-116D8 LOCAL HEADER #35      04034B50 (67324752)\n-116DC Extract Zip Spec      14 (20) '2.0'\n-116DD Extract OS            00 (0) 'MS-DOS'\n-116DE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-116E0 Compression Method    0000 (0) 'Stored'\n-116E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-116E6 CRC                   00000000 (0)\n-116EA Compressed Size       00000000 (0)\n-116EE Uncompressed Size     00000000 (0)\n-116F2 Filename Length       0036 (54)\n-116F4 Extra Length          0009 (9)\n-116F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x116F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1172C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1172E   Length              0005 (5)\n-11730   Flags               01 (1) 'Modification'\n-11731   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11735 PAYLOAD\n-\n-1218C DATA DESCRIPTOR       08074B50 (134695760)\n-12190 CRC                   33B4FA9F (867498655)\n-12194 Compressed Size       00000A57 (2647)\n-12198 Uncompressed Size     00000A57 (2647)\n-\n-1219C LOCAL HEADER #36      04034B50 (67324752)\n-121A0 Extract Zip Spec      14 (20) '2.0'\n-121A1 Extract OS            00 (0) 'MS-DOS'\n-121A2 General Purpose Flag  0000 (0)\n-121A4 Compression Method    0000 (0) 'Stored'\n-121A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-121AA CRC                   00000000 (0)\n-121AE Compressed Size       00000000 (0)\n-121B2 Uncompressed Size     00000000 (0)\n-121B6 Filename Length       0025 (37)\n-121B8 Extra Length          0009 (9)\n-121BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x121BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-121DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-121E1   Length              0005 (5)\n-121E3   Flags               01 (1) 'Modification'\n-121E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-121E8 LOCAL HEADER #37      04034B50 (67324752)\n-121EC Extract Zip Spec      14 (20) '2.0'\n-121ED Extract OS            00 (0) 'MS-DOS'\n-121EE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-121F0 Compression Method    0000 (0) 'Stored'\n-121F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-121F6 CRC                   00000000 (0)\n-121FA Compressed Size       00000000 (0)\n-121FE Uncompressed Size     00000000 (0)\n-12202 Filename Length       0041 (65)\n-12204 Extra Length          0009 (9)\n-12206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12247 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12249   Length              0005 (5)\n-1224B   Flags               01 (1) 'Modification'\n-1224C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12250 PAYLOAD\n-\n-12C90 DATA DESCRIPTOR       08074B50 (134695760)\n-12C94 CRC                   99A066B3 (2577426099)\n-12C98 Compressed Size       00000A40 (2624)\n-12C9C Uncompressed Size     00000A40 (2624)\n-\n-12CA0 LOCAL HEADER #38      04034B50 (67324752)\n-12CA4 Extract Zip Spec      14 (20) '2.0'\n-12CA5 Extract OS            00 (0) 'MS-DOS'\n-12CA6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-12CA8 Compression Method    0000 (0) 'Stored'\n-12CAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12CAE CRC                   00000000 (0)\n-12CB2 Compressed Size       00000000 (0)\n-12CB6 Uncompressed Size     00000000 (0)\n-12CBA Filename Length       0042 (66)\n-12CBC Extra Length          0009 (9)\n-12CBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12CBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12D00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12D02   Length              0005 (5)\n-12D04   Flags               01 (1) 'Modification'\n-12D05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12D09 PAYLOAD\n-\n-13C1E DATA DESCRIPTOR       08074B50 (134695760)\n-13C22 CRC                   8FC61B83 (2412125059)\n-13C26 Compressed Size       00000F15 (3861)\n-13C2A Uncompressed Size     00000F15 (3861)\n-\n-13C2E LOCAL HEADER #39      04034B50 (67324752)\n-13C32 Extract Zip Spec      14 (20) '2.0'\n-13C33 Extract OS            00 (0) 'MS-DOS'\n-13C34 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13C36 Compression Method    0000 (0) 'Stored'\n-13C38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13C3C CRC                   00000000 (0)\n-13C40 Compressed Size       00000000 (0)\n-13C44 Uncompressed Size     00000000 (0)\n-13C48 Filename Length       003F (63)\n-13C4A Extra Length          0009 (9)\n-13C4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13C4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13C8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13C8D   Length              0005 (5)\n-13C8F   Flags               01 (1) 'Modification'\n-13C90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13C94 PAYLOAD\n-\n-14986 DATA DESCRIPTOR       08074B50 (134695760)\n-1498A CRC                   C36126A3 (3277924003)\n-1498E Compressed Size       00000CF2 (3314)\n-14992 Uncompressed Size     00000CF2 (3314)\n-\n-14996 LOCAL HEADER #40      04034B50 (67324752)\n-1499A Extract Zip Spec      14 (20) '2.0'\n-1499B Extract OS            00 (0) 'MS-DOS'\n-1499C General Purpose Flag  0000 (0)\n-1499E Compression Method    0000 (0) 'Stored'\n-149A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-149A4 CRC                   00000000 (0)\n-149A8 Compressed Size       00000000 (0)\n-149AC Uncompressed Size     00000000 (0)\n-149B0 Filename Length       002D (45)\n-149B2 Extra Length          0009 (9)\n-149B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x149B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-149E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-149E3   Length              0005 (5)\n-149E5   Flags               01 (1) 'Modification'\n-149E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-149EA LOCAL HEADER #41      04034B50 (67324752)\n-149EE Extract Zip Spec      14 (20) '2.0'\n-149EF Extract OS            00 (0) 'MS-DOS'\n-149F0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-149F2 Compression Method    0000 (0) 'Stored'\n-149F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-149F8 CRC                   00000000 (0)\n-149FC Compressed Size       00000000 (0)\n-14A00 Uncompressed Size     00000000 (0)\n-14A04 Filename Length       0042 (66)\n-14A06 Extra Length          0009 (9)\n-14A08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x14A08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-14A4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-14A4C   Length              0005 (5)\n-14A4E   Flags               01 (1) 'Modification'\n-14A4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-14A53 PAYLOAD\n-\n-1510E DATA DESCRIPTOR       08074B50 (134695760)\n-15112 CRC                   C15189CF (3243346383)\n-15116 Compressed Size       000006BB (1723)\n-1511A Uncompressed Size     000006BB (1723)\n-\n-1511E LOCAL HEADER #42      04034B50 (67324752)\n-15122 Extract Zip Spec      14 (20) '2.0'\n-15123 Extract OS            00 (0) 'MS-DOS'\n-15124 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15126 Compression Method    0000 (0) 'Stored'\n-15128 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1512C CRC                   00000000 (0)\n-15130 Compressed Size       00000000 (0)\n-15134 Uncompressed Size     00000000 (0)\n-15138 Filename Length       0047 (71)\n-1513A Extra Length          0009 (9)\n-1513C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1513C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15183 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15185   Length              0005 (5)\n-15187   Flags               01 (1) 'Modification'\n-15188   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1518C PAYLOAD\n-\n-15C59 DATA DESCRIPTOR       08074B50 (134695760)\n-15C5D CRC                   48345DF3 (1211391475)\n-15C61 Compressed Size       00000ACD (2765)\n-15C65 Uncompressed Size     00000ACD (2765)\n-\n-15C69 LOCAL HEADER #43      04034B50 (67324752)\n-15C6D Extract Zip Spec      14 (20) '2.0'\n-15C6E Extract OS            00 (0) 'MS-DOS'\n-15C6F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15C71 Compression Method    0000 (0) 'Stored'\n-15C73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15C77 CRC                   00000000 (0)\n-15C7B Compressed Size       00000000 (0)\n-15C7F Uncompressed Size     00000000 (0)\n-15C83 Filename Length       0044 (68)\n-15C85 Extra Length          0009 (9)\n-15C87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15C87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15CCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15CCD   Length              0005 (5)\n-15CCF   Flags               01 (1) 'Modification'\n-15CD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-15CD4 PAYLOAD\n-\n-1668C DATA DESCRIPTOR       08074B50 (134695760)\n-16690 CRC                   8C150447 (2350187591)\n-16694 Compressed Size       000009B8 (2488)\n-16698 Uncompressed Size     000009B8 (2488)\n-\n-1669C LOCAL HEADER #44      04034B50 (67324752)\n-166A0 Extract Zip Spec      14 (20) '2.0'\n-166A1 Extract OS            00 (0) 'MS-DOS'\n-166A2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-166A4 Compression Method    0000 (0) 'Stored'\n-166A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-166AA CRC                   00000000 (0)\n-166AE Compressed Size       00000000 (0)\n-166B2 Uncompressed Size     00000000 (0)\n-166B6 Filename Length       0041 (65)\n-166B8 Extra Length          0009 (9)\n-166BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x166BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-166FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-166FD   Length              0005 (5)\n-166FF   Flags               01 (1) 'Modification'\n-16700   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16704 PAYLOAD\n-\n-16E9F DATA DESCRIPTOR       08074B50 (134695760)\n-16EA3 CRC                   288B644A (680223818)\n-16EA7 Compressed Size       0000079B (1947)\n-16EAB Uncompressed Size     0000079B (1947)\n-\n-16EAF LOCAL HEADER #45      04034B50 (67324752)\n-16EB3 Extract Zip Spec      14 (20) '2.0'\n-16EB4 Extract OS            00 (0) 'MS-DOS'\n-16EB5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16EB7 Compression Method    0000 (0) 'Stored'\n-16EB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16EBD CRC                   00000000 (0)\n-16EC1 Compressed Size       00000000 (0)\n-16EC5 Uncompressed Size     00000000 (0)\n-16EC9 Filename Length       0040 (64)\n-16ECB Extra Length          0009 (9)\n-16ECD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16ECD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16F0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16F0F   Length              0005 (5)\n-16F11   Flags               01 (1) 'Modification'\n-16F12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16F16 PAYLOAD\n-\n-17B57 DATA DESCRIPTOR       08074B50 (134695760)\n-17B5B CRC                   A6C8F390 (2798187408)\n-17B5F Compressed Size       00000C41 (3137)\n-17B63 Uncompressed Size     00000C41 (3137)\n-\n-17B67 LOCAL HEADER #46      04034B50 (67324752)\n-17B6B Extract Zip Spec      14 (20) '2.0'\n-17B6C Extract OS            00 (0) 'MS-DOS'\n-17B6D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-17B6F Compression Method    0000 (0) 'Stored'\n-17B71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17B75 CRC                   00000000 (0)\n-17B79 Compressed Size       00000000 (0)\n-17B7D Uncompressed Size     00000000 (0)\n-17B81 Filename Length       003D (61)\n-17B83 Extra Length          0009 (9)\n-17B85 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17B85: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17BC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17BC4   Length              0005 (5)\n-17BC6   Flags               01 (1) 'Modification'\n-17BC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17BCB PAYLOAD\n-\n-1816E DATA DESCRIPTOR       08074B50 (134695760)\n-18172 CRC                   7350CC44 (1934675012)\n-18176 Compressed Size       000005A3 (1443)\n-1817A Uncompressed Size     000005A3 (1443)\n-\n-1817E LOCAL HEADER #47      04034B50 (67324752)\n-18182 Extract Zip Spec      14 (20) '2.0'\n-18183 Extract OS            00 (0) 'MS-DOS'\n-18184 General Purpose Flag  0000 (0)\n-18186 Compression Method    0000 (0) 'Stored'\n-18188 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1818C CRC                   00000000 (0)\n-18190 Compressed Size       00000000 (0)\n-18194 Uncompressed Size     00000000 (0)\n-18198 Filename Length       002B (43)\n-1819A Extra Length          0009 (9)\n-1819C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1819C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-181C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-181C9   Length              0005 (5)\n-181CB   Flags               01 (1) 'Modification'\n-181CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-181D0 LOCAL HEADER #48      04034B50 (67324752)\n-181D4 Extract Zip Spec      14 (20) '2.0'\n-181D5 Extract OS            00 (0) 'MS-DOS'\n-181D6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-181D8 Compression Method    0000 (0) 'Stored'\n-181DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-181DE CRC                   00000000 (0)\n-181E2 Compressed Size       00000000 (0)\n-181E6 Uncompressed Size     00000000 (0)\n-181EA Filename Length       0045 (69)\n-181EC Extra Length          0009 (9)\n-181EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x181EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18233 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18235   Length              0005 (5)\n-18237   Flags               01 (1) 'Modification'\n-18238   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1823C PAYLOAD\n-\n-187A3 DATA DESCRIPTOR       08074B50 (134695760)\n-187A7 CRC                   53726EBB (1400008379)\n-187AB Compressed Size       00000567 (1383)\n-187AF Uncompressed Size     00000567 (1383)\n-\n-187B3 LOCAL HEADER #49      04034B50 (67324752)\n-187B7 Extract Zip Spec      14 (20) '2.0'\n-187B8 Extract OS            00 (0) 'MS-DOS'\n-187B9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-187BB Compression Method    0000 (0) 'Stored'\n-187BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-187C1 CRC                   00000000 (0)\n-187C5 Compressed Size       00000000 (0)\n-187C9 Uncompressed Size     00000000 (0)\n-187CD Filename Length       0040 (64)\n-187CF Extra Length          0009 (9)\n-187D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x187D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18811 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18813   Length              0005 (5)\n-18815   Flags               01 (1) 'Modification'\n-18816   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1881A PAYLOAD\n-\n-19463 DATA DESCRIPTOR       08074B50 (134695760)\n-19467 CRC                   C61A5369 (3323614057)\n-1946B Compressed Size       00000C49 (3145)\n-1946F Uncompressed Size     00000C49 (3145)\n-\n-19473 LOCAL HEADER #50      04034B50 (67324752)\n-19477 Extract Zip Spec      14 (20) '2.0'\n-19478 Extract OS            00 (0) 'MS-DOS'\n-19479 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1947B Compression Method    0000 (0) 'Stored'\n-1947D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19481 CRC                   00000000 (0)\n-19485 Compressed Size       00000000 (0)\n-19489 Uncompressed Size     00000000 (0)\n-1948D Filename Length       0041 (65)\n-1948F Extra Length          0009 (9)\n-19491 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19491: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194D4   Length              0005 (5)\n-194D6   Flags               01 (1) 'Modification'\n-194D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-194DB PAYLOAD\n-\n-1A0A2 DATA DESCRIPTOR       08074B50 (134695760)\n-1A0A6 CRC                   4594C88A (1167378570)\n-1A0AA Compressed Size       00000BC7 (3015)\n-1A0AE Uncompressed Size     00000BC7 (3015)\n-\n-1A0B2 LOCAL HEADER #51      04034B50 (67324752)\n-1A0B6 Extract Zip Spec      14 (20) '2.0'\n-1A0B7 Extract OS            00 (0) 'MS-DOS'\n-1A0B8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1A0BA Compression Method    0000 (0) 'Stored'\n-1A0BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1A0C0 CRC                   00000000 (0)\n-1A0C4 Compressed Size       00000000 (0)\n-1A0C8 Uncompressed Size     00000000 (0)\n-1A0CC Filename Length       003E (62)\n-1A0CE Extra Length          0009 (9)\n-1A0D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A0D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1A10E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1A110   Length              0005 (5)\n-1A112   Flags               01 (1) 'Modification'\n-1A113   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1A117 PAYLOAD\n-\n-1B5D2 DATA DESCRIPTOR       08074B50 (134695760)\n-1B5D6 CRC                   06EFE96C (116386156)\n-1B5DA Compressed Size       000014BB (5307)\n-1B5DE Uncompressed Size     000014BB (5307)\n-\n-1B5E2 LOCAL HEADER #52      04034B50 (67324752)\n-1B5E6 Extract Zip Spec      14 (20) '2.0'\n-1B5E7 Extract OS            00 (0) 'MS-DOS'\n-1B5E8 General Purpose Flag  0000 (0)\n-1B5EA Compression Method    0000 (0) 'Stored'\n-1B5EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1B5F0 CRC                   00000000 (0)\n-1B5F4 Compressed Size       00000000 (0)\n-1B5F8 Uncompressed Size     00000000 (0)\n-1B5FC Filename Length       002A (42)\n-1B5FE Extra Length          0009 (9)\n-1B600 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B600: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1B62A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1B62C   Length              0005 (5)\n-1B62E   Flags               01 (1) 'Modification'\n-1B62F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1B633 LOCAL HEADER #53      04034B50 (67324752)\n-1B637 Extract Zip Spec      14 (20) '2.0'\n-1B638 Extract OS            00 (0) 'MS-DOS'\n-1B639 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1B63B Compression Method    0000 (0) 'Stored'\n-1B63D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1B641 CRC                   00000000 (0)\n-1B645 Compressed Size       00000000 (0)\n-1B649 Uncompressed Size     00000000 (0)\n-1B64D Filename Length       0039 (57)\n-1B64F Extra Length          0009 (9)\n-1B651 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B651: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1B68A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1B68C   Length              0005 (5)\n-1B68E   Flags               01 (1) 'Modification'\n-1B68F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1B693 PAYLOAD\n-\n-1C43A DATA DESCRIPTOR       08074B50 (134695760)\n-1C43E CRC                   28793399 (679031705)\n-1C442 Compressed Size       00000DA7 (3495)\n-1C446 Uncompressed Size     00000DA7 (3495)\n-\n-1C44A LOCAL HEADER #54      04034B50 (67324752)\n-1C44E Extract Zip Spec      14 (20) '2.0'\n-1C44F Extract OS            00 (0) 'MS-DOS'\n-1C450 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1C452 Compression Method    0000 (0) 'Stored'\n-1C454 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1C458 CRC                   00000000 (0)\n-1C45C Compressed Size       00000000 (0)\n-1C460 Uncompressed Size     00000000 (0)\n-1C464 Filename Length       0046 (70)\n-1C466 Extra Length          0009 (9)\n-1C468 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1C468: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1C4AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1C4B0   Length              0005 (5)\n-1C4B2   Flags               01 (1) 'Modification'\n-1C4B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1C4B7 PAYLOAD\n-\n-1D19E DATA DESCRIPTOR       08074B50 (134695760)\n-1D1A2 CRC                   A3334B6D (2738047853)\n-1D1A6 Compressed Size       00000CE7 (3303)\n-1D1AA Uncompressed Size     00000CE7 (3303)\n-\n-1D1AE LOCAL HEADER #55      04034B50 (67324752)\n-1D1B2 Extract Zip Spec      14 (20) '2.0'\n-1D1B3 Extract OS            00 (0) 'MS-DOS'\n-1D1B4 General Purpose Flag  0000 (0)\n-1D1B6 Compression Method    0000 (0) 'Stored'\n-1D1B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1D1BC CRC                   00000000 (0)\n-1D1C0 Compressed Size       00000000 (0)\n-1D1C4 Uncompressed Size     00000000 (0)\n-1D1C8 Filename Length       0021 (33)\n-1D1CA Extra Length          0009 (9)\n-1D1CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D1CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1D1ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1D1EF   Length              0005 (5)\n-1D1F1   Flags               01 (1) 'Modification'\n-1D1F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1D1F6 LOCAL HEADER #56      04034B50 (67324752)\n-1D1FA Extract Zip Spec      14 (20) '2.0'\n-1D1FB Extract OS            00 (0) 'MS-DOS'\n-1D1FC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1D1FE Compression Method    0000 (0) 'Stored'\n-1D200 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1D204 CRC                   00000000 (0)\n-1D208 Compressed Size       00000000 (0)\n-1D20C Uncompressed Size     00000000 (0)\n-1D210 Filename Length       0034 (52)\n-1D212 Extra Length          0009 (9)\n-1D214 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D214: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1D248 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1D24A   Length              0005 (5)\n-1D24C   Flags               01 (1) 'Modification'\n-1D24D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1D251 PAYLOAD\n-\n-1DDB7 DATA DESCRIPTOR       08074B50 (134695760)\n-1DDBB CRC                   04A20B3B (77728571)\n-1DDBF Compressed Size       00000B66 (2918)\n-1DDC3 Uncompressed Size     00000B66 (2918)\n-\n-1DDC7 LOCAL HEADER #57      04034B50 (67324752)\n-1DDCB Extract Zip Spec      14 (20) '2.0'\n-1DDCC Extract OS            00 (0) 'MS-DOS'\n-1DDCD General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1DDCF Compression Method    0000 (0) 'Stored'\n-1DDD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1DDD5 CRC                   00000000 (0)\n-1DDD9 Compressed Size       00000000 (0)\n-1DDDD Uncompressed Size     00000000 (0)\n-1DDE1 Filename Length       003B (59)\n-1DDE3 Extra Length          0009 (9)\n-1DDE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1DDE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1DE20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1DE22   Length              0005 (5)\n-1DE24   Flags               01 (1) 'Modification'\n-1DE25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1DE29 PAYLOAD\n-\n-1E289 DATA DESCRIPTOR       08074B50 (134695760)\n-1E28D CRC                   60C61EB2 (1623596722)\n-1E291 Compressed Size       00000460 (1120)\n-1E295 Uncompressed Size     00000460 (1120)\n-\n-1E299 LOCAL HEADER #58      04034B50 (67324752)\n-1E29D Extract Zip Spec      14 (20) '2.0'\n-1E29E Extract OS            00 (0) 'MS-DOS'\n-1E29F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1E2A1 Compression Method    0000 (0) 'Stored'\n-1E2A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1E2A7 CRC                   00000000 (0)\n-1E2AB Compressed Size       00000000 (0)\n-1E2AF Uncompressed Size     00000000 (0)\n-1E2B3 Filename Length       003C (60)\n-1E2B5 Extra Length          0009 (9)\n-1E2B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1E2B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1E2F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1E2F5   Length              0005 (5)\n-1E2F7   Flags               01 (1) 'Modification'\n-1E2F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1E2FC PAYLOAD\n-\n-1F106 DATA DESCRIPTOR       08074B50 (134695760)\n-1F10A CRC                   5AB1BA26 (1521596966)\n-1F10E Compressed Size       00000E0A (3594)\n-1F112 Uncompressed Size     00000E0A (3594)\n-\n-1F116 LOCAL HEADER #59      04034B50 (67324752)\n-1F11A Extract Zip Spec      14 (20) '2.0'\n-1F11B Extract OS            00 (0) 'MS-DOS'\n-1F11C General Purpose Flag  0000 (0)\n-1F11E Compression Method    0000 (0) 'Stored'\n-1F120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1F124 CRC                   00000000 (0)\n-1F128 Compressed Size       00000000 (0)\n-1F12C Uncompressed Size     00000000 (0)\n-1F130 Filename Length       002C (44)\n-1F132 Extra Length          0009 (9)\n-1F134 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F134: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1F160 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1F162   Length              0005 (5)\n-1F164   Flags               01 (1) 'Modification'\n-1F165   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1F169 LOCAL HEADER #60      04034B50 (67324752)\n-1F16D Extract Zip Spec      14 (20) '2.0'\n-1F16E Extract OS            00 (0) 'MS-DOS'\n-1F16F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1F171 Compression Method    0000 (0) 'Stored'\n-1F173 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1F177 CRC                   00000000 (0)\n-1F17B Compressed Size       00000000 (0)\n-1F17F Uncompressed Size     00000000 (0)\n-1F183 Filename Length       0052 (82)\n-1F185 Extra Length          0009 (9)\n-1F187 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F187: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1F1D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1F1DB   Length              0005 (5)\n-1F1DD   Flags               01 (1) 'Modification'\n-1F1DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1F1E2 PAYLOAD\n-\n-1FABF DATA DESCRIPTOR       08074B50 (134695760)\n-1FAC3 CRC                   ED364E79 (3979759225)\n-1FAC7 Compressed Size       000008DD (2269)\n-1FACB Uncompressed Size     000008DD (2269)\n-\n-1FACF LOCAL HEADER #61      04034B50 (67324752)\n-1FAD3 Extract Zip Spec      14 (20) '2.0'\n-1FAD4 Extract OS            00 (0) 'MS-DOS'\n-1FAD5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1FAD7 Compression Method    0000 (0) 'Stored'\n-1FAD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1FADD CRC                   00000000 (0)\n-1FAE1 Compressed Size       00000000 (0)\n-1FAE5 Uncompressed Size     00000000 (0)\n-1FAE9 Filename Length       0047 (71)\n-1FAEB Extra Length          0009 (9)\n-1FAED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1FAED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1FB34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1FB36   Length              0005 (5)\n-1FB38   Flags               01 (1) 'Modification'\n-1FB39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1FB3D PAYLOAD\n-\n-1FF11 DATA DESCRIPTOR       08074B50 (134695760)\n-1FF15 CRC                   07379C13 (121084947)\n-1FF19 Compressed Size       000003D4 (980)\n-1FF1D Uncompressed Size     000003D4 (980)\n-\n-1FF21 LOCAL HEADER #62      04034B50 (67324752)\n-1FF25 Extract Zip Spec      14 (20) '2.0'\n-1FF26 Extract OS            00 (0) 'MS-DOS'\n-1FF27 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1FF29 Compression Method    0000 (0) 'Stored'\n-1FF2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1FF2F CRC                   00000000 (0)\n-1FF33 Compressed Size       00000000 (0)\n-1FF37 Uncompressed Size     00000000 (0)\n-1FF3B Filename Length       004E (78)\n-1FF3D Extra Length          0009 (9)\n-1FF3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1FF3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1FF8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1FF8F   Length              0005 (5)\n-1FF91   Flags               01 (1) 'Modification'\n-1FF92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1FF96 PAYLOAD\n-\n-20BF8 DATA DESCRIPTOR       08074B50 (134695760)\n-20BFC CRC                   AA1837AB (2853713835)\n-20C00 Compressed Size       00000C62 (3170)\n-20C04 Uncompressed Size     00000C62 (3170)\n-\n-20C08 LOCAL HEADER #63      04034B50 (67324752)\n-20C0C Extract Zip Spec      14 (20) '2.0'\n-20C0D Extract OS            00 (0) 'MS-DOS'\n-20C0E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-20C10 Compression Method    0000 (0) 'Stored'\n-20C12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-20C16 CRC                   00000000 (0)\n-20C1A Compressed Size       00000000 (0)\n-20C1E Uncompressed Size     00000000 (0)\n-20C22 Filename Length       003C (60)\n-20C24 Extra Length          0009 (9)\n-20C26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20C26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-20C62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-20C64   Length              0005 (5)\n-20C66   Flags               01 (1) 'Modification'\n-20C67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-20C6B PAYLOAD\n-\n-21488 DATA DESCRIPTOR       08074B50 (134695760)\n-2148C CRC                   C4C68375 (3301344117)\n-21490 Compressed Size       0000081D (2077)\n-21494 Uncompressed Size     0000081D (2077)\n-\n-21498 LOCAL HEADER #64      04034B50 (67324752)\n-2149C Extract Zip Spec      14 (20) '2.0'\n-2149D Extract OS            00 (0) 'MS-DOS'\n-2149E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-214A0 Compression Method    0000 (0) 'Stored'\n-214A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-214A6 CRC                   00000000 (0)\n-214AA Compressed Size       00000000 (0)\n-214AE Uncompressed Size     00000000 (0)\n-214B2 Filename Length       0043 (67)\n-214B4 Extra Length          0009 (9)\n-214B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x214B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-214F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-214FB   Length              0005 (5)\n-214FD   Flags               01 (1) 'Modification'\n-214FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-21502 PAYLOAD\n-\n-2217C DATA DESCRIPTOR       08074B50 (134695760)\n-22180 CRC                   F9021EF9 (4177665785)\n-22184 Compressed Size       00000C7A (3194)\n-22188 Uncompressed Size     00000C7A (3194)\n-\n-2218C LOCAL HEADER #65      04034B50 (67324752)\n-22190 Extract Zip Spec      14 (20) '2.0'\n-22191 Extract OS            00 (0) 'MS-DOS'\n-22192 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-22194 Compression Method    0000 (0) 'Stored'\n-22196 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2219A CRC                   00000000 (0)\n-2219E Compressed Size       00000000 (0)\n-221A2 Uncompressed Size     00000000 (0)\n-221A6 Filename Length       004A (74)\n-221A8 Extra Length          0009 (9)\n-221AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x221AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-221F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-221F6   Length              0005 (5)\n-221F8   Flags               01 (1) 'Modification'\n-221F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-221FD PAYLOAD\n-\n-22E3B DATA DESCRIPTOR       08074B50 (134695760)\n-22E3F CRC                   D8F5C90C (3639986444)\n-22E43 Compressed Size       00000C3E (3134)\n-22E47 Uncompressed Size     00000C3E (3134)\n-\n-22E4B LOCAL HEADER #66      04034B50 (67324752)\n-22E4F Extract Zip Spec      14 (20) '2.0'\n-22E50 Extract OS            00 (0) 'MS-DOS'\n-22E51 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-22E53 Compression Method    0000 (0) 'Stored'\n-22E55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-22E59 CRC                   00000000 (0)\n-22E5D Compressed Size       00000000 (0)\n-22E61 Uncompressed Size     00000000 (0)\n-22E65 Filename Length       004D (77)\n-22E67 Extra Length          0009 (9)\n-22E69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22E69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-22EB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-22EB8   Length              0005 (5)\n-22EBA   Flags               01 (1) 'Modification'\n-22EBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-22EBF PAYLOAD\n-\n-23730 DATA DESCRIPTOR       08074B50 (134695760)\n-23734 CRC                   F7E9DD6B (4159298923)\n-23738 Compressed Size       00000871 (2161)\n-2373C Uncompressed Size     00000871 (2161)\n-\n-23740 LOCAL HEADER #67      04034B50 (67324752)\n-23744 Extract Zip Spec      14 (20) '2.0'\n-23745 Extract OS            00 (0) 'MS-DOS'\n-23746 General Purpose Flag  0000 (0)\n-23748 Compression Method    0000 (0) 'Stored'\n-2374A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2374E CRC                   00000000 (0)\n-23752 Compressed Size       00000000 (0)\n-23756 Uncompressed Size     00000000 (0)\n-2375A Filename Length       0029 (41)\n-2375C Extra Length          0009 (9)\n-2375E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2375E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-23787 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-23789   Length              0005 (5)\n-2378B   Flags               01 (1) 'Modification'\n-2378C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-23790 LOCAL HEADER #68      04034B50 (67324752)\n-23794 Extract Zip Spec      14 (20) '2.0'\n-23795 Extract OS            00 (0) 'MS-DOS'\n-23796 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-23798 Compression Method    0000 (0) 'Stored'\n-2379A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2379E CRC                   00000000 (0)\n-237A2 Compressed Size       00000000 (0)\n-237A6 Uncompressed Size     00000000 (0)\n-237AA Filename Length       0044 (68)\n-237AC Extra Length          0009 (9)\n-237AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x237AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-237F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-237F4   Length              0005 (5)\n-237F6   Flags               01 (1) 'Modification'\n-237F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-237FB PAYLOAD\n-\n-2877A DATA DESCRIPTOR       08074B50 (134695760)\n-2877E CRC                   8DD7FA96 (2379741846)\n-28782 Compressed Size       00004F7F (20351)\n-28786 Uncompressed Size     00004F7F (20351)\n-\n-2878A LOCAL HEADER #69      04034B50 (67324752)\n-2878E Extract Zip Spec      14 (20) '2.0'\n-2878F Extract OS            00 (0) 'MS-DOS'\n-28790 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-28792 Compression Method    0000 (0) 'Stored'\n-28794 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-28798 CRC                   00000000 (0)\n-2879C Compressed Size       00000000 (0)\n-287A0 Uncompressed Size     00000000 (0)\n-287A4 Filename Length       004B (75)\n-287A6 Extra Length          0009 (9)\n-287A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x287A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-287F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-287F5   Length              0005 (5)\n-287F7   Flags               01 (1) 'Modification'\n-287F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-287FC PAYLOAD\n-\n-2923F DATA DESCRIPTOR       08074B50 (134695760)\n-29243 CRC                   C31A43AC (3273278380)\n-29247 Compressed Size       00000A43 (2627)\n-2924B Uncompressed Size     00000A43 (2627)\n-\n-2924F LOCAL HEADER #70      04034B50 (67324752)\n-29253 Extract Zip Spec      14 (20) '2.0'\n-29254 Extract OS            00 (0) 'MS-DOS'\n-29255 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-29257 Compression Method    0000 (0) 'Stored'\n-29259 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2925D CRC                   00000000 (0)\n-29261 Compressed Size       00000000 (0)\n-29265 Uncompressed Size     00000000 (0)\n-29269 Filename Length       0037 (55)\n-2926B Extra Length          0009 (9)\n-2926D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2926D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-292A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-292A6   Length              0005 (5)\n-292A8   Flags               01 (1) 'Modification'\n-292A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-292AD PAYLOAD\n-\n-297B3 DATA DESCRIPTOR       08074B50 (134695760)\n-297B7 CRC                   4CCC6F49 (1288466249)\n-297BB Compressed Size       00000506 (1286)\n-297BF Uncompressed Size     00000506 (1286)\n-\n-297C3 LOCAL HEADER #71      04034B50 (67324752)\n-297C7 Extract Zip Spec      14 (20) '2.0'\n-297C8 Extract OS            00 (0) 'MS-DOS'\n-297C9 General Purpose Flag  0000 (0)\n-297CB Compression Method    0000 (0) 'Stored'\n-297CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-297D1 CRC                   00000000 (0)\n-297D5 Compressed Size       00000000 (0)\n-297D9 Uncompressed Size     00000000 (0)\n-297DD Filename Length       001F (31)\n-297DF Extra Length          0009 (9)\n-297E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x297E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-29800 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-29802   Length              0005 (5)\n-29804   Flags               01 (1) 'Modification'\n-29805   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-29809 LOCAL HEADER #72      04034B50 (67324752)\n-2980D Extract Zip Spec      14 (20) '2.0'\n-2980E Extract OS            00 (0) 'MS-DOS'\n-2980F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-29811 Compression Method    0000 (0) 'Stored'\n-29813 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-29817 CRC                   00000000 (0)\n-2981B Compressed Size       00000000 (0)\n-2981F Uncompressed Size     00000000 (0)\n-29823 Filename Length       004D (77)\n-29825 Extra Length          0009 (9)\n-29827 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29827: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-29874 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-29876   Length              0005 (5)\n-29878   Flags               01 (1) 'Modification'\n-29879   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2987D PAYLOAD\n-\n-2A1EC DATA DESCRIPTOR       08074B50 (134695760)\n-2A1F0 CRC                   B342E8EC (3007506668)\n-2A1F4 Compressed Size       0000096F (2415)\n-2A1F8 Uncompressed Size     0000096F (2415)\n-\n-2A1FC LOCAL HEADER #73      04034B50 (67324752)\n-2A200 Extract Zip Spec      14 (20) '2.0'\n-2A201 Extract OS            00 (0) 'MS-DOS'\n-2A202 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2A204 Compression Method    0000 (0) 'Stored'\n-2A206 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2A20A CRC                   00000000 (0)\n-2A20E Compressed Size       00000000 (0)\n-2A212 Uncompressed Size     00000000 (0)\n-2A216 Filename Length       0047 (71)\n-2A218 Extra Length          0009 (9)\n-2A21A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2A21A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2A261 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2A263   Length              0005 (5)\n-2A265   Flags               01 (1) 'Modification'\n-2A266   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2A26A PAYLOAD\n-\n-2DFF1 DATA DESCRIPTOR       08074B50 (134695760)\n-2DFF5 CRC                   CAD52129 (3402965289)\n-2DFF9 Compressed Size       00003D87 (15751)\n-2DFFD Uncompressed Size     00003D87 (15751)\n-\n-2E001 LOCAL HEADER #74      04034B50 (67324752)\n-2E005 Extract Zip Spec      14 (20) '2.0'\n-2E006 Extract OS            00 (0) 'MS-DOS'\n-2E007 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E009 Compression Method    0000 (0) 'Stored'\n-2E00B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E00F CRC                   00000000 (0)\n-2E013 Compressed Size       00000000 (0)\n-2E017 Uncompressed Size     00000000 (0)\n-2E01B Filename Length       0045 (69)\n-2E01D Extra Length          0009 (9)\n-2E01F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E01F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E064 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E066   Length              0005 (5)\n-2E068   Flags               01 (1) 'Modification'\n-2E069   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2E06D PAYLOAD\n-\n-2EA32 DATA DESCRIPTOR       08074B50 (134695760)\n-2EA36 CRC                   47F26503 (1207067907)\n-2EA3A Compressed Size       000009C5 (2501)\n-2EA3E Uncompressed Size     000009C5 (2501)\n-\n-2EA42 LOCAL HEADER #75      04034B50 (67324752)\n-2EA46 Extract Zip Spec      14 (20) '2.0'\n-2EA47 Extract OS            00 (0) 'MS-DOS'\n-2EA48 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2EA4A Compression Method    0000 (0) 'Stored'\n-2EA4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2EA50 CRC                   00000000 (0)\n-2EA54 Compressed Size       00000000 (0)\n-2EA58 Uncompressed Size     00000000 (0)\n-2EA5C Filename Length       0046 (70)\n-2EA5E Extra Length          0009 (9)\n-2EA60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2EA60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2EAA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2EAA8   Length              0005 (5)\n-2EAAA   Flags               01 (1) 'Modification'\n-2EAAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2EAAF PAYLOAD\n-\n-2F7B6 DATA DESCRIPTOR       08074B50 (134695760)\n-2F7BA CRC                   19F0D91C (435214620)\n-2F7BE Compressed Size       00000D07 (3335)\n-2F7C2 Uncompressed Size     00000D07 (3335)\n-\n-2F7C6 LOCAL HEADER #76      04034B50 (67324752)\n-2F7CA Extract Zip Spec      14 (20) '2.0'\n-2F7CB Extract OS            00 (0) 'MS-DOS'\n-2F7CC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2F7CE Compression Method    0000 (0) 'Stored'\n-2F7D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2F7D4 CRC                   00000000 (0)\n-2F7D8 Compressed Size       00000000 (0)\n-2F7DC Uncompressed Size     00000000 (0)\n-2F7E0 Filename Length       0046 (70)\n-2F7E2 Extra Length          0009 (9)\n-2F7E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F7E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2F82A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2F82C   Length              0005 (5)\n-2F82E   Flags               01 (1) 'Modification'\n-2F82F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2F833 PAYLOAD\n-\n-2FFF6 DATA DESCRIPTOR       08074B50 (134695760)\n-2FFFA CRC                   7E8AFFB4 (2123038644)\n-2FFFE Compressed Size       000007C3 (1987)\n-30002 Uncompressed Size     000007C3 (1987)\n-\n-30006 LOCAL HEADER #77      04034B50 (67324752)\n-3000A Extract Zip Spec      14 (20) '2.0'\n-3000B Extract OS            00 (0) 'MS-DOS'\n-3000C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3000E Compression Method    0000 (0) 'Stored'\n-30010 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-30014 CRC                   00000000 (0)\n-30018 Compressed Size       00000000 (0)\n-3001C Uncompressed Size     00000000 (0)\n-30020 Filename Length       0033 (51)\n-30022 Extra Length          0009 (9)\n-30024 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x30024: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-30057 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-30059   Length              0005 (5)\n-3005B   Flags               01 (1) 'Modification'\n-3005C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-30060 PAYLOAD\n-\n-31BD0 DATA DESCRIPTOR       08074B50 (134695760)\n-31BD4 CRC                   BE623F70 (3194109808)\n-31BD8 Compressed Size       00001B70 (7024)\n-31BDC Uncompressed Size     00001B70 (7024)\n-\n-31BE0 LOCAL HEADER #78      04034B50 (67324752)\n-31BE4 Extract Zip Spec      14 (20) '2.0'\n-31BE5 Extract OS            00 (0) 'MS-DOS'\n-31BE6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-31BE8 Compression Method    0000 (0) 'Stored'\n-31BEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-31BEE CRC                   00000000 (0)\n-31BF2 Compressed Size       00000000 (0)\n-31BF6 Uncompressed Size     00000000 (0)\n-31BFA Filename Length       0039 (57)\n-31BFC Extra Length          0009 (9)\n-31BFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31BFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-31C37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-31C39   Length              0005 (5)\n-31C3B   Flags               01 (1) 'Modification'\n-31C3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-31C40 PAYLOAD\n-\n-32E4B DATA DESCRIPTOR       08074B50 (134695760)\n-32E4F CRC                   C31D4A4B (3273476683)\n-32E53 Compressed Size       0000120B (4619)\n-32E57 Uncompressed Size     0000120B (4619)\n-\n-32E5B LOCAL HEADER #79      04034B50 (67324752)\n-32E5F Extract Zip Spec      14 (20) '2.0'\n-32E60 Extract OS            00 (0) 'MS-DOS'\n-32E61 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-32E63 Compression Method    0000 (0) 'Stored'\n-32E65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-32E69 CRC                   00000000 (0)\n-32E6D Compressed Size       00000000 (0)\n-32E71 Uncompressed Size     00000000 (0)\n-32E75 Filename Length       0036 (54)\n-32E77 Extra Length          0009 (9)\n-32E79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x32E79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-32EAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-32EB1   Length              0005 (5)\n-32EB3   Flags               01 (1) 'Modification'\n-32EB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-32EB8 PAYLOAD\n-\n-346C6 DATA DESCRIPTOR       08074B50 (134695760)\n-346CA CRC                   B4E1FAB5 (3034708661)\n-346CE Compressed Size       0000180E (6158)\n-346D2 Uncompressed Size     0000180E (6158)\n-\n-346D6 LOCAL HEADER #80      04034B50 (67324752)\n-346DA Extract Zip Spec      14 (20) '2.0'\n-346DB Extract OS            00 (0) 'MS-DOS'\n-346DC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-346DE Compression Method    0000 (0) 'Stored'\n-346E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-346E4 CRC                   00000000 (0)\n-346E8 Compressed Size       00000000 (0)\n-346EC Uncompressed Size     00000000 (0)\n-346F0 Filename Length       0037 (55)\n-346F2 Extra Length          0009 (9)\n-346F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x346F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3472B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3472D   Length              0005 (5)\n-3472F   Flags               01 (1) 'Modification'\n-34730   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-34734 PAYLOAD\n-\n-353AF DATA DESCRIPTOR       08074B50 (134695760)\n-353B3 CRC                   5668569D (1449678493)\n-353B7 Compressed Size       00000C7B (3195)\n-353BB Uncompressed Size     00000C7B (3195)\n-\n-353BF LOCAL HEADER #81      04034B50 (67324752)\n-353C3 Extract Zip Spec      14 (20) '2.0'\n-353C4 Extract OS            00 (0) 'MS-DOS'\n-353C5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-353C7 Compression Method    0000 (0) 'Stored'\n-353C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-353CD CRC                   00000000 (0)\n-353D1 Compressed Size       00000000 (0)\n-353D5 Uncompressed Size     00000000 (0)\n-353D9 Filename Length       003D (61)\n-353DB Extra Length          0009 (9)\n-353DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x353DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3541A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3541C   Length              0005 (5)\n-3541E   Flags               01 (1) 'Modification'\n-3541F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-35423 PAYLOAD\n-\n-358E4 DATA DESCRIPTOR       08074B50 (134695760)\n-358E8 CRC                   EA525DAF (3931266479)\n-358EC Compressed Size       000004C1 (1217)\n-358F0 Uncompressed Size     000004C1 (1217)\n-\n-358F4 LOCAL HEADER #82      04034B50 (67324752)\n-358F8 Extract Zip Spec      14 (20) '2.0'\n-358F9 Extract OS            00 (0) 'MS-DOS'\n-358FA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-358FC Compression Method    0000 (0) 'Stored'\n-358FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-35902 CRC                   00000000 (0)\n-35906 Compressed Size       00000000 (0)\n-3590A Uncompressed Size     00000000 (0)\n-3590E Filename Length       003F (63)\n-35910 Extra Length          0009 (9)\n-35912 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35912: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-35951 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-35953   Length              0005 (5)\n-35955   Flags               01 (1) 'Modification'\n-35956   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3595A PAYLOAD\n-\n-35F96 DATA DESCRIPTOR       08074B50 (134695760)\n-35F9A CRC                   6E98A8DB (1855498459)\n-35F9E Compressed Size       0000063C (1596)\n-35FA2 Uncompressed Size     0000063C (1596)\n-\n-35FA6 LOCAL HEADER #83      04034B50 (67324752)\n-35FAA Extract Zip Spec      14 (20) '2.0'\n-35FAB Extract OS            00 (0) 'MS-DOS'\n-35FAC General Purpose Flag  0000 (0)\n-35FAE Compression Method    0000 (0) 'Stored'\n-35FB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-35FB4 CRC                   00000000 (0)\n-35FB8 Compressed Size       00000000 (0)\n-35FBC Uncompressed Size     00000000 (0)\n-35FC0 Filename Length       0025 (37)\n-35FC2 Extra Length          0009 (9)\n-35FC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35FC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-35FE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-35FEB   Length              0005 (5)\n-35FED   Flags               01 (1) 'Modification'\n-35FEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-35FF2 LOCAL HEADER #84      04034B50 (67324752)\n-35FF6 Extract Zip Spec      14 (20) '2.0'\n-35FF7 Extract OS            00 (0) 'MS-DOS'\n-35FF8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-35FFA Compression Method    0000 (0) 'Stored'\n-35FFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-36000 CRC                   00000000 (0)\n-36004 Compressed Size       00000000 (0)\n-36008 Uncompressed Size     00000000 (0)\n-3600C Filename Length       0048 (72)\n-3600E Extra Length          0009 (9)\n-36010 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36010: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-36058 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3605A   Length              0005 (5)\n-3605C   Flags               01 (1) 'Modification'\n-3605D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-36061 PAYLOAD\n-\n-36BA8 DATA DESCRIPTOR       08074B50 (134695760)\n-36BAC CRC                   96165FE8 (2518048744)\n-36BB0 Compressed Size       00000B47 (2887)\n-36BB4 Uncompressed Size     00000B47 (2887)\n-\n-36BB8 LOCAL HEADER #85      04034B50 (67324752)\n-36BBC Extract Zip Spec      14 (20) '2.0'\n-36BBD Extract OS            00 (0) 'MS-DOS'\n-36BBE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-36BC0 Compression Method    0000 (0) 'Stored'\n-36BC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-36BC6 CRC                   00000000 (0)\n-36BCA Compressed Size       00000000 (0)\n-36BCE Uncompressed Size     00000000 (0)\n-36BD2 Filename Length       0045 (69)\n-36BD4 Extra Length          0009 (9)\n-36BD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36BD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-36C1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-36C1D   Length              0005 (5)\n-36C1F   Flags               01 (1) 'Modification'\n-36C20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-36C24 PAYLOAD\n-\n-37164 DATA DESCRIPTOR       08074B50 (134695760)\n-37168 CRC                   BB15446F (3138733167)\n-3716C Compressed Size       00000540 (1344)\n-37170 Uncompressed Size     00000540 (1344)\n-\n-37174 LOCAL HEADER #86      04034B50 (67324752)\n-37178 Extract Zip Spec      14 (20) '2.0'\n-37179 Extract OS            00 (0) 'MS-DOS'\n-3717A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3717C Compression Method    0000 (0) 'Stored'\n-3717E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-37182 CRC                   00000000 (0)\n-37186 Compressed Size       00000000 (0)\n-3718A Uncompressed Size     00000000 (0)\n-3718E Filename Length       0047 (71)\n-37190 Extra Length          0009 (9)\n-37192 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37192: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-371D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-371DB   Length              0005 (5)\n-371DD   Flags               01 (1) 'Modification'\n-371DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-371E2 PAYLOAD\n-\n-37A54 DATA DESCRIPTOR       08074B50 (134695760)\n-37A58 CRC                   C656CCE4 (3327577316)\n-37A5C Compressed Size       00000872 (2162)\n-37A60 Uncompressed Size     00000872 (2162)\n-\n-37A64 LOCAL HEADER #87      04034B50 (67324752)\n-37A68 Extract Zip Spec      14 (20) '2.0'\n-37A69 Extract OS            00 (0) 'MS-DOS'\n-37A6A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-37A6C Compression Method    0000 (0) 'Stored'\n-37A6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-37A72 CRC                   00000000 (0)\n-37A76 Compressed Size       00000000 (0)\n-37A7A Uncompressed Size     00000000 (0)\n-37A7E Filename Length       004A (74)\n-37A80 Extra Length          0009 (9)\n-37A82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37A82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-37ACC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-37ACE   Length              0005 (5)\n-37AD0   Flags               01 (1) 'Modification'\n-37AD1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-37AD5 PAYLOAD\n-\n-38CBB DATA DESCRIPTOR       08074B50 (134695760)\n-38CBF CRC                   6100366B (1627403883)\n-38CC3 Compressed Size       000011E6 (4582)\n-38CC7 Uncompressed Size     000011E6 (4582)\n-\n-38CCB LOCAL HEADER #88      04034B50 (67324752)\n-38CCF Extract Zip Spec      14 (20) '2.0'\n-38CD0 Extract OS            00 (0) 'MS-DOS'\n-38CD1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-38CD3 Compression Method    0000 (0) 'Stored'\n-38CD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-38CD9 CRC                   00000000 (0)\n-38CDD Compressed Size       00000000 (0)\n-38CE1 Uncompressed Size     00000000 (0)\n-38CE5 Filename Length       0047 (71)\n-38CE7 Extra Length          0009 (9)\n-38CE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x38CE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-38D30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-38D32   Length              0005 (5)\n-38D34   Flags               01 (1) 'Modification'\n-38D35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-38D39 PAYLOAD\n-\n-39281 DATA DESCRIPTOR       08074B50 (134695760)\n-39285 CRC                   8939A522 (2302256418)\n-39289 Compressed Size       00000548 (1352)\n-3928D Uncompressed Size     00000548 (1352)\n-\n-39291 LOCAL HEADER #89      04034B50 (67324752)\n-39295 Extract Zip Spec      14 (20) '2.0'\n-39296 Extract OS            00 (0) 'MS-DOS'\n-39297 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-39299 Compression Method    0000 (0) 'Stored'\n-3929B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3929F CRC                   00000000 (0)\n-392A3 Compressed Size       00000000 (0)\n-392A7 Uncompressed Size     00000000 (0)\n-392AB Filename Length       004B (75)\n-392AD Extra Length          0009 (9)\n-392AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x392AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-392FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-392FC   Length              0005 (5)\n-392FE   Flags               01 (1) 'Modification'\n-392FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-39303 PAYLOAD\n-\n-399E1 DATA DESCRIPTOR       08074B50 (134695760)\n-399E5 CRC                   2244431E (574898974)\n-399E9 Compressed Size       000006DE (1758)\n-399ED Uncompressed Size     000006DE (1758)\n-\n-399F1 LOCAL HEADER #90      04034B50 (67324752)\n-399F5 Extract Zip Spec      14 (20) '2.0'\n-399F6 Extract OS            00 (0) 'MS-DOS'\n-399F7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-399F9 Compression Method    0000 (0) 'Stored'\n-399FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-399FF CRC                   00000000 (0)\n-39A03 Compressed Size       00000000 (0)\n-39A07 Uncompressed Size     00000000 (0)\n-39A0B Filename Length       0046 (70)\n-39A0D Extra Length          0009 (9)\n-39A0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39A0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-39A55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-39A57   Length              0005 (5)\n-39A59   Flags               01 (1) 'Modification'\n-39A5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-39A5E PAYLOAD\n-\n-39FA2 DATA DESCRIPTOR       08074B50 (134695760)\n-39FA6 CRC                   6B0A1F36 (1795825462)\n-39FAA Compressed Size       00000544 (1348)\n-39FAE Uncompressed Size     00000544 (1348)\n-\n-39FB2 LOCAL HEADER #91      04034B50 (67324752)\n-39FB6 Extract Zip Spec      14 (20) '2.0'\n-39FB7 Extract OS            00 (0) 'MS-DOS'\n-39FB8 General Purpose Flag  0000 (0)\n-39FBA Compression Method    0000 (0) 'Stored'\n-39FBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-39FC0 CRC                   00000000 (0)\n-39FC4 Compressed Size       00000000 (0)\n-39FC8 Uncompressed Size     00000000 (0)\n-39FCC Filename Length       0029 (41)\n-39FCE Extra Length          0009 (9)\n-39FD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39FD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-39FF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-39FFB   Length              0005 (5)\n-39FFD   Flags               01 (1) 'Modification'\n-39FFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3A002 LOCAL HEADER #92      04034B50 (67324752)\n-3A006 Extract Zip Spec      14 (20) '2.0'\n-3A007 Extract OS            00 (0) 'MS-DOS'\n-3A008 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3A00A Compression Method    0000 (0) 'Stored'\n-3A00C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3A010 CRC                   00000000 (0)\n-3A014 Compressed Size       00000000 (0)\n-3A018 Uncompressed Size     00000000 (0)\n-3A01C Filename Length       0059 (89)\n-3A01E Extra Length          0009 (9)\n-3A020 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A020: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3A079 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3A07B   Length              0005 (5)\n-3A07D   Flags               01 (1) 'Modification'\n-3A07E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3A082 PAYLOAD\n-\n-3ABB2 DATA DESCRIPTOR       08074B50 (134695760)\n-3ABB6 CRC                   F6AB8A5C (4138437212)\n-3ABBA Compressed Size       00000B30 (2864)\n-3ABBE Uncompressed Size     00000B30 (2864)\n-\n-3ABC2 LOCAL HEADER #93      04034B50 (67324752)\n-3ABC6 Extract Zip Spec      14 (20) '2.0'\n-3ABC7 Extract OS            00 (0) 'MS-DOS'\n-3ABC8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3ABCA Compression Method    0000 (0) 'Stored'\n-3ABCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3ABD0 CRC                   00000000 (0)\n-3ABD4 Compressed Size       00000000 (0)\n-3ABD8 Uncompressed Size     00000000 (0)\n-3ABDC Filename Length       004D (77)\n-3ABDE Extra Length          0009 (9)\n-3ABE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3ABE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3AC2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3AC2F   Length              0005 (5)\n-3AC31   Flags               01 (1) 'Modification'\n-3AC32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3AC36 PAYLOAD\n-\n-3B33B DATA DESCRIPTOR       08074B50 (134695760)\n-3B33F CRC                   8ECDA075 (2395840629)\n-3B343 Compressed Size       00000705 (1797)\n-3B347 Uncompressed Size     00000705 (1797)\n-\n-3B34B LOCAL HEADER #94      04034B50 (67324752)\n-3B34F Extract Zip Spec      14 (20) '2.0'\n-3B350 Extract OS            00 (0) 'MS-DOS'\n-3B351 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3B353 Compression Method    0000 (0) 'Stored'\n-3B355 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3B359 CRC                   00000000 (0)\n-3B35D Compressed Size       00000000 (0)\n-3B361 Uncompressed Size     00000000 (0)\n-3B365 Filename Length       004C (76)\n-3B367 Extra Length          0009 (9)\n-3B369 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B369: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3B3B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3B3B7   Length              0005 (5)\n-3B3B9   Flags               01 (1) 'Modification'\n-3B3BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3B3BE PAYLOAD\n-\n-3BABE DATA DESCRIPTOR       08074B50 (134695760)\n-3BAC2 CRC                   C535197D (3308591485)\n-3BAC6 Compressed Size       00000700 (1792)\n-3BACA Uncompressed Size     00000700 (1792)\n-\n-3BACE LOCAL HEADER #95      04034B50 (67324752)\n-3BAD2 Extract Zip Spec      14 (20) '2.0'\n-3BAD3 Extract OS            00 (0) 'MS-DOS'\n-3BAD4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3BAD6 Compression Method    0000 (0) 'Stored'\n-3BAD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3BADC CRC                   00000000 (0)\n-3BAE0 Compressed Size       00000000 (0)\n-3BAE4 Uncompressed Size     00000000 (0)\n-3BAE8 Filename Length       0052 (82)\n-3BAEA Extra Length          0009 (9)\n-3BAEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3BAEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3BB3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3BB40   Length              0005 (5)\n-3BB42   Flags               01 (1) 'Modification'\n-3BB43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3BB47 PAYLOAD\n-\n-3D3B7 DATA DESCRIPTOR       08074B50 (134695760)\n-3D3BB CRC                   A895CAB3 (2828389043)\n-3D3BF Compressed Size       00001870 (6256)\n-3D3C3 Uncompressed Size     00001870 (6256)\n-\n-3D3C7 LOCAL HEADER #96      04034B50 (67324752)\n-3D3CB Extract Zip Spec      14 (20) '2.0'\n-3D3CC Extract OS            00 (0) 'MS-DOS'\n-3D3CD General Purpose Flag  0000 (0)\n-3D3CF Compression Method    0000 (0) 'Stored'\n-3D3D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3D3D5 CRC                   00000000 (0)\n-3D3D9 Compressed Size       00000000 (0)\n-3D3DD Uncompressed Size     00000000 (0)\n-3D3E1 Filename Length       0020 (32)\n-3D3E3 Extra Length          0009 (9)\n-3D3E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D3E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3D405 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3D407   Length              0005 (5)\n-3D409   Flags               01 (1) 'Modification'\n-3D40A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3D40E LOCAL HEADER #97      04034B50 (67324752)\n-3D412 Extract Zip Spec      14 (20) '2.0'\n-3D413 Extract OS            00 (0) 'MS-DOS'\n-3D414 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3D416 Compression Method    0000 (0) 'Stored'\n-3D418 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3D41C CRC                   00000000 (0)\n-3D420 Compressed Size       00000000 (0)\n-3D424 Uncompressed Size     00000000 (0)\n-3D428 Filename Length       004C (76)\n-3D42A Extra Length          0009 (9)\n-3D42C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D42C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3D478 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3D47A   Length              0005 (5)\n-3D47C   Flags               01 (1) 'Modification'\n-3D47D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3D481 PAYLOAD\n-\n-3E4EB DATA DESCRIPTOR       08074B50 (134695760)\n-3E4EF CRC                   C67BB267 (3329995367)\n-3E4F3 Compressed Size       0000106A (4202)\n-3E4F7 Uncompressed Size     0000106A (4202)\n-\n-3E4FB CENTRAL HEADER #1     02014B50 (33639248)\n-3E4FF Created Zip Spec      14 (20) '2.0'\n-3E500 Created OS            00 (0) 'MS-DOS'\n-3E501 Extract Zip Spec      14 (20) '2.0'\n-3E502 Extract OS            00 (0) 'MS-DOS'\n-3E503 General Purpose Flag  0000 (0)\n-3E505 Compression Method    0000 (0) 'Stored'\n-3E507 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E50B CRC                   00000000 (0)\n-3E50F Compressed Size       00000000 (0)\n-3E513 Uncompressed Size     00000000 (0)\n-3E517 Filename Length       0009 (9)\n-3E519 Extra Length          0009 (9)\n-3E51B Comment Length        0000 (0)\n-3E51D Disk Start            0000 (0)\n-3E51F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E521 Ext File Attributes   00000000 (0)\n-3E525 Local Header Offset   00000000 (0)\n-3E529 Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E529: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-3E532 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E534   Length              0005 (5)\n-3E536   Flags               01 (1) 'Modification'\n-3E537   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E53B CENTRAL HEADER #2     02014B50 (33639248)\n-3E53F Created Zip Spec      14 (20) '2.0'\n-3E540 Created OS            00 (0) 'MS-DOS'\n-3E541 Extract Zip Spec      14 (20) '2.0'\n-3E542 Extract OS            00 (0) 'MS-DOS'\n-3E543 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E545 Compression Method    0000 (0) 'Stored'\n-3E547 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E54B CRC                   F19B91F6 (4053504502)\n-3E54F Compressed Size       00000CE0 (3296)\n-3E553 Uncompressed Size     00000CE0 (3296)\n-3E557 Filename Length       0015 (21)\n-3E559 Extra Length          0009 (9)\n-3E55B Comment Length        0000 (0)\n-3E55D Disk Start            0000 (0)\n-3E55F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E561 Ext File Attributes   00000000 (0)\n-3E565 Local Header Offset   00000030 (48)\n-3E569 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E569: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E57E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E580   Length              0005 (5)\n-3E582   Flags               01 (1) 'Modification'\n-3E583   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E587 CENTRAL HEADER #3     02014B50 (33639248)\n-3E58B Created Zip Spec      14 (20) '2.0'\n-3E58C Created OS            00 (0) 'MS-DOS'\n-3E58D Extract Zip Spec      14 (20) '2.0'\n-3E58E Extract OS            00 (0) 'MS-DOS'\n-3E58F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E591 Compression Method    0000 (0) 'Stored'\n-3E593 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E597 CRC                   86E2B4B4 (2263004340)\n-3E59B Compressed Size       00002C5E (11358)\n-3E59F Uncompressed Size     00002C5E (11358)\n-3E5A3 Filename Length       0010 (16)\n-3E5A5 Extra Length          0009 (9)\n-3E5A7 Comment Length        0000 (0)\n-3E5A9 Disk Start            0000 (0)\n-3E5AB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E5AD Ext File Attributes   00000000 (0)\n-3E5B1 Local Header Offset   00000D5C (3420)\n-3E5B5 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E5B5: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E5C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E5C7   Length              0005 (5)\n-3E5C9   Flags               01 (1) 'Modification'\n-3E5CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E5CE CENTRAL HEADER #4     02014B50 (33639248)\n-3E5D2 Created Zip Spec      14 (20) '2.0'\n-3E5D3 Created OS            00 (0) 'MS-DOS'\n-3E5D4 Extract Zip Spec      14 (20) '2.0'\n-3E5D5 Extract OS            00 (0) 'MS-DOS'\n-3E5D6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E5D8 Compression Method    0000 (0) 'Stored'\n-3E5DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E5DE CRC                   EE027FB2 (3993141170)\n-3E5E2 Compressed Size       00000019 (25)\n-3E5E6 Uncompressed Size     00000019 (25)\n-3E5EA Filename Length       0014 (20)\n-3E5EC Extra Length          0009 (9)\n-3E5EE Comment Length        0000 (0)\n-3E5F0 Disk Start            0000 (0)\n-3E5F2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E5F4 Ext File Attributes   00000000 (0)\n-3E5F8 Local Header Offset   00003A01 (14849)\n-3E5FC Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E5FC: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E610 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E612   Length              0005 (5)\n-3E614   Flags               01 (1) 'Modification'\n-3E615   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E619 CENTRAL HEADER #5     02014B50 (33639248)\n-3E61D Created Zip Spec      14 (20) '2.0'\n-3E61E Created OS            00 (0) 'MS-DOS'\n-3E61F Extract Zip Spec      14 (20) '2.0'\n-3E620 Extract OS            00 (0) 'MS-DOS'\n-3E621 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E623 Compression Method    0000 (0) 'Stored'\n-3E625 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E629 CRC                   AFC7B46A (2949100650)\n-3E62D Compressed Size       000000AF (175)\n-3E631 Uncompressed Size     000000AF (175)\n-3E635 Filename Length       000F (15)\n-3E637 Extra Length          0009 (9)\n-3E639 Comment Length        0000 (0)\n-3E63B Disk Start            0000 (0)\n-3E63D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E63F Ext File Attributes   00000000 (0)\n-3E643 Local Header Offset   00003A65 (14949)\n-3E647 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E647: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E656 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E658   Length              0005 (5)\n-3E65A   Flags               01 (1) 'Modification'\n-3E65B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E65F CENTRAL HEADER #6     02014B50 (33639248)\n-3E663 Created Zip Spec      14 (20) '2.0'\n-3E664 Created OS            00 (0) 'MS-DOS'\n-3E665 Extract Zip Spec      14 (20) '2.0'\n-3E666 Extract OS            00 (0) 'MS-DOS'\n-3E667 General Purpose Flag  0000 (0)\n-3E669 Compression Method    0000 (0) 'Stored'\n-3E66B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E66F CRC                   00000000 (0)\n-3E673 Compressed Size       00000000 (0)\n-3E677 Uncompressed Size     00000000 (0)\n-3E67B Filename Length       000F (15)\n-3E67D Extra Length          0009 (9)\n-3E67F Comment Length        0000 (0)\n-3E681 Disk Start            0000 (0)\n-3E683 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E685 Ext File Attributes   00000000 (0)\n-3E689 Local Header Offset   00003B5A (15194)\n-3E68D Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E68D: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E69C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E69E   Length              0005 (5)\n-3E6A0   Flags               01 (1) 'Modification'\n-3E6A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E6A5 CENTRAL HEADER #7     02014B50 (33639248)\n-3E6A9 Created Zip Spec      14 (20) '2.0'\n-3E6AA Created OS            00 (0) 'MS-DOS'\n-3E6AB Extract Zip Spec      14 (20) '2.0'\n-3E6AC Extract OS            00 (0) 'MS-DOS'\n-3E6AD General Purpose Flag  0000 (0)\n-3E6AF Compression Method    0000 (0) 'Stored'\n-3E6B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E6B5 CRC                   00000000 (0)\n-3E6B9 Compressed Size       00000000 (0)\n-3E6BD Uncompressed Size     00000000 (0)\n-3E6C1 Filename Length       0018 (24)\n-3E6C3 Extra Length          0009 (9)\n-3E6C5 Comment Length        0000 (0)\n-3E6C7 Disk Start            0000 (0)\n-3E6C9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E6CB Ext File Attributes   00000000 (0)\n-3E6CF Local Header Offset   00003B90 (15248)\n-3E6D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E6D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E6EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E6ED   Length              0005 (5)\n-3E6EF   Flags               01 (1) 'Modification'\n-3E6F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E6F4 CENTRAL HEADER #8     02014B50 (33639248)\n-3E6F8 Created Zip Spec      14 (20) '2.0'\n-3E6F9 Created OS            00 (0) 'MS-DOS'\n-3E6FA Extract Zip Spec      14 (20) '2.0'\n-3E6FB Extract OS            00 (0) 'MS-DOS'\n-3E6FC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E6FE Compression Method    0000 (0) 'Stored'\n-3E700 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E704 CRC                   ACE74F1F (2900840223)\n-3E708 Compressed Size       0000003D (61)\n-3E70C Uncompressed Size     0000003D (61)\n-3E710 Filename Length       0046 (70)\n-3E712 Extra Length          0009 (9)\n-3E714 Comment Length        0000 (0)\n-3E716 Disk Start            0000 (0)\n-3E718 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E71A Ext File Attributes   00000000 (0)\n-3E71E Local Header Offset   00003BCF (15311)\n-3E722 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E722: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E768 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E76A   Length              0005 (5)\n-3E76C   Flags               01 (1) 'Modification'\n-3E76D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E771 CENTRAL HEADER #9     02014B50 (33639248)\n-3E775 Created Zip Spec      14 (20) '2.0'\n-3E776 Created OS            00 (0) 'MS-DOS'\n-3E777 Extract Zip Spec      14 (20) '2.0'\n-3E778 Extract OS            00 (0) 'MS-DOS'\n-3E779 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E77B Compression Method    0000 (0) 'Stored'\n-3E77D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E781 CRC                   F8A431C6 (4171510214)\n-3E785 Compressed Size       00000047 (71)\n-3E789 Uncompressed Size     00000047 (71)\n-3E78D Filename Length       0044 (68)\n-3E78F Extra Length          0009 (9)\n-3E791 Comment Length        0000 (0)\n-3E793 Disk Start            0000 (0)\n-3E795 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E797 Ext File Attributes   00000000 (0)\n-3E79B Local Header Offset   00003C89 (15497)\n-3E79F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E79F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E7E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E7E5   Length              0005 (5)\n-3E7E7   Flags               01 (1) 'Modification'\n-3E7E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E7EC CENTRAL HEADER #10    02014B50 (33639248)\n-3E7F0 Created Zip Spec      14 (20) '2.0'\n-3E7F1 Created OS            00 (0) 'MS-DOS'\n-3E7F2 Extract Zip Spec      14 (20) '2.0'\n-3E7F3 Extract OS            00 (0) 'MS-DOS'\n-3E7F4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E7F6 Compression Method    0000 (0) 'Stored'\n-3E7F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E7FC CRC                   D03529EC (3493145068)\n-3E800 Compressed Size       00000113 (275)\n-3E804 Uncompressed Size     00000113 (275)\n-3E808 Filename Length       0050 (80)\n-3E80A Extra Length          0009 (9)\n-3E80C Comment Length        0000 (0)\n-3E80E Disk Start            0000 (0)\n-3E810 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E812 Ext File Attributes   00000000 (0)\n-3E816 Local Header Offset   00003D4B (15691)\n-3E81A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E81A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E86A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E86C   Length              0005 (5)\n-3E86E   Flags               01 (1) 'Modification'\n-3E86F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E873 CENTRAL HEADER #11    02014B50 (33639248)\n-3E877 Created Zip Spec      14 (20) '2.0'\n-3E878 Created OS            00 (0) 'MS-DOS'\n-3E879 Extract Zip Spec      14 (20) '2.0'\n-3E87A Extract OS            00 (0) 'MS-DOS'\n-3E87B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E87D Compression Method    0000 (0) 'Stored'\n-3E87F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E883 CRC                   0C0A9CCA (202022090)\n-3E887 Compressed Size       000002CB (715)\n-3E88B Uncompressed Size     000002CB (715)\n-3E88F Filename Length       0058 (88)\n-3E891 Extra Length          0009 (9)\n-3E893 Comment Length        0000 (0)\n-3E895 Disk Start            0000 (0)\n-3E897 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E899 Ext File Attributes   00000000 (0)\n-3E89D Local Header Offset   00003EE5 (16101)\n-3E8A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E8A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E8F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E8FB   Length              0005 (5)\n-3E8FD   Flags               01 (1) 'Modification'\n-3E8FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E902 CENTRAL HEADER #12    02014B50 (33639248)\n-3E906 Created Zip Spec      14 (20) '2.0'\n-3E907 Created OS            00 (0) 'MS-DOS'\n-3E908 Extract Zip Spec      14 (20) '2.0'\n-3E909 Extract OS            00 (0) 'MS-DOS'\n-3E90A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E90C Compression Method    0000 (0) 'Stored'\n-3E90E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E912 CRC                   CCA3FD93 (3433299347)\n-3E916 Compressed Size       000000B6 (182)\n-3E91A Uncompressed Size     000000B6 (182)\n-3E91E Filename Length       0052 (82)\n-3E920 Extra Length          0009 (9)\n-3E922 Comment Length        0000 (0)\n-3E924 Disk Start            0000 (0)\n-3E926 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E928 Ext File Attributes   00000000 (0)\n-3E92C Local Header Offset   0000423F (16959)\n-3E930 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E930: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E982 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E984   Length              0005 (5)\n-3E986   Flags               01 (1) 'Modification'\n-3E987   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E98B CENTRAL HEADER #13    02014B50 (33639248)\n-3E98F Created Zip Spec      14 (20) '2.0'\n-3E990 Created OS            00 (0) 'MS-DOS'\n-3E991 Extract Zip Spec      14 (20) '2.0'\n-3E992 Extract OS            00 (0) 'MS-DOS'\n-3E993 General Purpose Flag  0000 (0)\n-3E995 Compression Method    0000 (0) 'Stored'\n-3E997 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E99B CRC                   00000000 (0)\n-3E99F Compressed Size       00000000 (0)\n-3E9A3 Uncompressed Size     00000000 (0)\n-3E9A7 Filename Length       000F (15)\n-3E9A9 Extra Length          0009 (9)\n-3E9AB Comment Length        0000 (0)\n-3E9AD Disk Start            0000 (0)\n-3E9AF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E9B1 Ext File Attributes   00000000 (0)\n-3E9B5 Local Header Offset   0000437E (17278)\n-3E9B9 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E9B9: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E9C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E9CA   Length              0005 (5)\n-3E9CC   Flags               01 (1) 'Modification'\n-3E9CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E9D1 CENTRAL HEADER #14    02014B50 (33639248)\n-3E9D5 Created Zip Spec      14 (20) '2.0'\n-3E9D6 Created OS            00 (0) 'MS-DOS'\n-3E9D7 Extract Zip Spec      14 (20) '2.0'\n-3E9D8 Extract OS            00 (0) 'MS-DOS'\n-3E9D9 General Purpose Flag  0000 (0)\n-3E9DB Compression Method    0000 (0) 'Stored'\n-3E9DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E9E1 CRC                   00000000 (0)\n-3E9E5 Compressed Size       00000000 (0)\n-3E9E9 Uncompressed Size     00000000 (0)\n-3E9ED Filename Length       0020 (32)\n-3E9EF Extra Length          0009 (9)\n-3E9F1 Comment Length        0000 (0)\n-3E9F3 Disk Start            0000 (0)\n-3E9F5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3E9F7 Ext File Attributes   00000000 (0)\n-3E9FB Local Header Offset   000043B4 (17332)\n-3E9FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E9FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EA1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EA21   Length              0005 (5)\n-3EA23   Flags               01 (1) 'Modification'\n-3EA24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EA28 CENTRAL HEADER #15    02014B50 (33639248)\n-3EA2C Created Zip Spec      14 (20) '2.0'\n-3EA2D Created OS            00 (0) 'MS-DOS'\n-3EA2E Extract Zip Spec      14 (20) '2.0'\n-3EA2F Extract OS            00 (0) 'MS-DOS'\n-3EA30 General Purpose Flag  0000 (0)\n-3EA32 Compression Method    0000 (0) 'Stored'\n-3EA34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EA38 CRC                   00000000 (0)\n-3EA3C Compressed Size       00000000 (0)\n-3EA40 Uncompressed Size     00000000 (0)\n-3EA44 Filename Length       0033 (51)\n-3EA46 Extra Length          0009 (9)\n-3EA48 Comment Length        0000 (0)\n-3EA4A Disk Start            0000 (0)\n-3EA4C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EA4E Ext File Attributes   00000000 (0)\n-3EA52 Local Header Offset   000043FB (17403)\n-3EA56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EA56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EA89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EA8B   Length              0005 (5)\n-3EA8D   Flags               01 (1) 'Modification'\n-3EA8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EA92 CENTRAL HEADER #16    02014B50 (33639248)\n-3EA96 Created Zip Spec      14 (20) '2.0'\n-3EA97 Created OS            00 (0) 'MS-DOS'\n-3EA98 Extract Zip Spec      14 (20) '2.0'\n-3EA99 Extract OS            00 (0) 'MS-DOS'\n-3EA9A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EA9C Compression Method    0000 (0) 'Stored'\n-3EA9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EAA2 CRC                   00000000 (0)\n-3EAA6 Compressed Size       00000000 (0)\n-3EAAA Uncompressed Size     00000000 (0)\n-3EAAE Filename Length       0041 (65)\n-3EAB0 Extra Length          0009 (9)\n-3EAB2 Comment Length        0000 (0)\n-3EAB4 Disk Start            0000 (0)\n-3EAB6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EAB8 Ext File Attributes   00000000 (0)\n-3EABC Local Header Offset   00004455 (17493)\n-3EAC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EAC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EB01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EB03   Length              0005 (5)\n-3EB05   Flags               01 (1) 'Modification'\n-3EB06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EB0A CENTRAL HEADER #17    02014B50 (33639248)\n-3EB0E Created Zip Spec      14 (20) '2.0'\n-3EB0F Created OS            00 (0) 'MS-DOS'\n-3EB10 Extract Zip Spec      14 (20) '2.0'\n-3EB11 Extract OS            00 (0) 'MS-DOS'\n-3EB12 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EB14 Compression Method    0000 (0) 'Stored'\n-3EB16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EB1A CRC                   364739E6 (910637542)\n-3EB1E Compressed Size       00000BF2 (3058)\n-3EB22 Uncompressed Size     00000BF2 (3058)\n-3EB26 Filename Length       003A (58)\n-3EB28 Extra Length          0009 (9)\n-3EB2A Comment Length        0000 (0)\n-3EB2C Disk Start            0000 (0)\n-3EB2E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EB30 Ext File Attributes   00000000 (0)\n-3EB34 Local Header Offset   000044CD (17613)\n-3EB38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EB38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EB72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EB74   Length              0005 (5)\n-3EB76   Flags               01 (1) 'Modification'\n-3EB77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EB7B CENTRAL HEADER #18    02014B50 (33639248)\n-3EB7F Created Zip Spec      14 (20) '2.0'\n-3EB80 Created OS            00 (0) 'MS-DOS'\n-3EB81 Extract Zip Spec      14 (20) '2.0'\n-3EB82 Extract OS            00 (0) 'MS-DOS'\n-3EB83 General Purpose Flag  0000 (0)\n-3EB85 Compression Method    0000 (0) 'Stored'\n-3EB87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EB8B CRC                   00000000 (0)\n-3EB8F Compressed Size       00000000 (0)\n-3EB93 Uncompressed Size     00000000 (0)\n-3EB97 Filename Length       0004 (4)\n-3EB99 Extra Length          0009 (9)\n-3EB9B Comment Length        0000 (0)\n-3EB9D Disk Start            0000 (0)\n-3EB9F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EBA1 Ext File Attributes   00000000 (0)\n-3EBA5 Local Header Offset   00005130 (20784)\n-3EBA9 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x3EBA9: Filename 'XXXX'\n-#          Zero length filename\n-#\n-3EBAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EBAF   Length              0005 (5)\n-3EBB1   Flags               01 (1) 'Modification'\n-3EBB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EBB6 CENTRAL HEADER #19    02014B50 (33639248)\n-3EBBA Created Zip Spec      14 (20) '2.0'\n-3EBBB Created OS            00 (0) 'MS-DOS'\n-3EBBC Extract Zip Spec      14 (20) '2.0'\n-3EBBD Extract OS            00 (0) 'MS-DOS'\n-3EBBE General Purpose Flag  0000 (0)\n-3EBC0 Compression Method    0000 (0) 'Stored'\n-3EBC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EBC6 CRC                   00000000 (0)\n-3EBCA Compressed Size       00000000 (0)\n-3EBCE Uncompressed Size     00000000 (0)\n-3EBD2 Filename Length       000B (11)\n-3EBD4 Extra Length          0009 (9)\n-3EBD6 Comment Length        0000 (0)\n-3EBD8 Disk Start            0000 (0)\n-3EBDA Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EBDC Ext File Attributes   00000000 (0)\n-3EBE0 Local Header Offset   0000515B (20827)\n-3EBE4 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EBE4: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EBEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EBF1   Length              0005 (5)\n-3EBF3   Flags               01 (1) 'Modification'\n-3EBF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EBF8 CENTRAL HEADER #20    02014B50 (33639248)\n-3EBFC Created Zip Spec      14 (20) '2.0'\n-3EBFD Created OS            00 (0) 'MS-DOS'\n-3EBFE Extract Zip Spec      14 (20) '2.0'\n-3EBFF Extract OS            00 (0) 'MS-DOS'\n-3EC00 General Purpose Flag  0000 (0)\n-3EC02 Compression Method    0000 (0) 'Stored'\n-3EC04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EC08 CRC                   00000000 (0)\n-3EC0C Compressed Size       00000000 (0)\n-3EC10 Uncompressed Size     00000000 (0)\n-3EC14 Filename Length       0011 (17)\n-3EC16 Extra Length          0009 (9)\n-3EC18 Comment Length        0000 (0)\n-3EC1A Disk Start            0000 (0)\n-3EC1C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EC1E Ext File Attributes   00000000 (0)\n-3EC22 Local Header Offset   0000518D (20877)\n-3EC26 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EC26: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EC37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EC39   Length              0005 (5)\n-3EC3B   Flags               01 (1) 'Modification'\n-3EC3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EC40 CENTRAL HEADER #21    02014B50 (33639248)\n-3EC44 Created Zip Spec      14 (20) '2.0'\n-3EC45 Created OS            00 (0) 'MS-DOS'\n-3EC46 Extract Zip Spec      14 (20) '2.0'\n-3EC47 Extract OS            00 (0) 'MS-DOS'\n-3EC48 General Purpose Flag  0000 (0)\n-3EC4A Compression Method    0000 (0) 'Stored'\n-3EC4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EC50 CRC                   00000000 (0)\n-3EC54 Compressed Size       00000000 (0)\n-3EC58 Uncompressed Size     00000000 (0)\n-3EC5C Filename Length       001A (26)\n-3EC5E Extra Length          0009 (9)\n-3EC60 Comment Length        0000 (0)\n-3EC62 Disk Start            0000 (0)\n-3EC64 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EC66 Ext File Attributes   00000000 (0)\n-3EC6A Local Header Offset   000051C5 (20933)\n-3EC6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EC6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EC88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EC8A   Length              0005 (5)\n-3EC8C   Flags               01 (1) 'Modification'\n-3EC8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EC91 CENTRAL HEADER #22    02014B50 (33639248)\n-3EC95 Created Zip Spec      14 (20) '2.0'\n-3EC96 Created OS            00 (0) 'MS-DOS'\n-3EC97 Extract Zip Spec      14 (20) '2.0'\n-3EC98 Extract OS            00 (0) 'MS-DOS'\n-3EC99 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EC9B Compression Method    0000 (0) 'Stored'\n-3EC9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3ECA1 CRC                   CF6AE7CA (3479889866)\n-3ECA5 Compressed Size       00000A57 (2647)\n-3ECA9 Uncompressed Size     00000A57 (2647)\n-3ECAD Filename Length       003A (58)\n-3ECAF Extra Length          0009 (9)\n-3ECB1 Comment Length        0000 (0)\n-3ECB3 Disk Start            0000 (0)\n-3ECB5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3ECB7 Ext File Attributes   00000000 (0)\n-3ECBB Local Header Offset   00005206 (20998)\n-3ECBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3ECBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3ECF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3ECFB   Length              0005 (5)\n-3ECFD   Flags               01 (1) 'Modification'\n-3ECFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3ED02 CENTRAL HEADER #23    02014B50 (33639248)\n-3ED06 Created Zip Spec      14 (20) '2.0'\n-3ED07 Created OS            00 (0) 'MS-DOS'\n-3ED08 Extract Zip Spec      14 (20) '2.0'\n-3ED09 Extract OS            00 (0) 'MS-DOS'\n-3ED0A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3ED0C Compression Method    0000 (0) 'Stored'\n-3ED0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3ED12 CRC                   462DB2DF (1177400031)\n-3ED16 Compressed Size       0000100F (4111)\n-3ED1A Uncompressed Size     0000100F (4111)\n-3ED1E Filename Length       0045 (69)\n-3ED20 Extra Length          0009 (9)\n-3ED22 Comment Length        0000 (0)\n-3ED24 Disk Start            0000 (0)\n-3ED26 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3ED28 Ext File Attributes   00000000 (0)\n-3ED2C Local Header Offset   00005CCE (23758)\n-3ED30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3ED30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3ED75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3ED77   Length              0005 (5)\n-3ED79   Flags               01 (1) 'Modification'\n-3ED7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3ED7E CENTRAL HEADER #24    02014B50 (33639248)\n-3ED82 Created Zip Spec      14 (20) '2.0'\n-3ED83 Created OS            00 (0) 'MS-DOS'\n-3ED84 Extract Zip Spec      14 (20) '2.0'\n-3ED85 Extract OS            00 (0) 'MS-DOS'\n-3ED86 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3ED88 Compression Method    0000 (0) 'Stored'\n-3ED8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3ED8E CRC                   A8E35A99 (2833472153)\n-3ED92 Compressed Size       000004F2 (1266)\n-3ED96 Uncompressed Size     000004F2 (1266)\n-3ED9A Filename Length       0032 (50)\n-3ED9C Extra Length          0009 (9)\n-3ED9E Comment Length        0000 (0)\n-3EDA0 Disk Start            0000 (0)\n-3EDA2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EDA4 Ext File Attributes   00000000 (0)\n-3EDA8 Local Header Offset   00006D59 (27993)\n-3EDAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EDAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EDDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EDE0   Length              0005 (5)\n-3EDE2   Flags               01 (1) 'Modification'\n-3EDE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EDE7 CENTRAL HEADER #25    02014B50 (33639248)\n-3EDEB Created Zip Spec      14 (20) '2.0'\n-3EDEC Created OS            00 (0) 'MS-DOS'\n-3EDED Extract Zip Spec      14 (20) '2.0'\n-3EDEE Extract OS            00 (0) 'MS-DOS'\n-3EDEF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EDF1 Compression Method    0000 (0) 'Stored'\n-3EDF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EDF7 CRC                   ECCEFB44 (3972987716)\n-3EDFB Compressed Size       00000398 (920)\n-3EDFF Uncompressed Size     00000398 (920)\n-3EE03 Filename Length       002E (46)\n-3EE05 Extra Length          0009 (9)\n-3EE07 Comment Length        0000 (0)\n-3EE09 Disk Start            0000 (0)\n-3EE0B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EE0D Ext File Attributes   00000000 (0)\n-3EE11 Local Header Offset   000072B4 (29364)\n-3EE15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EE15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EE43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EE45   Length              0005 (5)\n-3EE47   Flags               01 (1) 'Modification'\n-3EE48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EE4C CENTRAL HEADER #26    02014B50 (33639248)\n-3EE50 Created Zip Spec      14 (20) '2.0'\n-3EE51 Created OS            00 (0) 'MS-DOS'\n-3EE52 Extract Zip Spec      14 (20) '2.0'\n-3EE53 Extract OS            00 (0) 'MS-DOS'\n-3EE54 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EE56 Compression Method    0000 (0) 'Stored'\n-3EE58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EE5C CRC                   7822EF2B (2015555371)\n-3EE60 Compressed Size       000004DC (1244)\n-3EE64 Uncompressed Size     000004DC (1244)\n-3EE68 Filename Length       0035 (53)\n-3EE6A Extra Length          0009 (9)\n-3EE6C Comment Length        0000 (0)\n-3EE6E Disk Start            0000 (0)\n-3EE70 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EE72 Ext File Attributes   00000000 (0)\n-3EE76 Local Header Offset   000076B1 (30385)\n-3EE7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EE7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EEAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EEB1   Length              0005 (5)\n-3EEB3   Flags               01 (1) 'Modification'\n-3EEB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EEB8 CENTRAL HEADER #27    02014B50 (33639248)\n-3EEBC Created Zip Spec      14 (20) '2.0'\n-3EEBD Created OS            00 (0) 'MS-DOS'\n-3EEBE Extract Zip Spec      14 (20) '2.0'\n-3EEBF Extract OS            00 (0) 'MS-DOS'\n-3EEC0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EEC2 Compression Method    0000 (0) 'Stored'\n-3EEC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EEC8 CRC                   5CAAFB07 (1554709255)\n-3EECC Compressed Size       0000062F (1583)\n-3EED0 Uncompressed Size     0000062F (1583)\n-3EED4 Filename Length       0030 (48)\n-3EED6 Extra Length          0009 (9)\n-3EED8 Comment Length        0000 (0)\n-3EEDA Disk Start            0000 (0)\n-3EEDC Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EEDE Ext File Attributes   00000000 (0)\n-3EEE2 Local Header Offset   00007BF9 (31737)\n-3EEE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EEE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EF16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EF18   Length              0005 (5)\n-3EF1A   Flags               01 (1) 'Modification'\n-3EF1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EF1F CENTRAL HEADER #28    02014B50 (33639248)\n-3EF23 Created Zip Spec      14 (20) '2.0'\n-3EF24 Created OS            00 (0) 'MS-DOS'\n-3EF25 Extract Zip Spec      14 (20) '2.0'\n-3EF26 Extract OS            00 (0) 'MS-DOS'\n-3EF27 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EF29 Compression Method    0000 (0) 'Stored'\n-3EF2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EF2F CRC                   4F1688E0 (1326876896)\n-3EF33 Compressed Size       00003A7C (14972)\n-3EF37 Uncompressed Size     00003A7C (14972)\n-3EF3B Filename Length       002B (43)\n-3EF3D Extra Length          0009 (9)\n-3EF3F Comment Length        0000 (0)\n-3EF41 Disk Start            0000 (0)\n-3EF43 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EF45 Ext File Attributes   00000000 (0)\n-3EF49 Local Header Offset   0000828F (33423)\n-3EF4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EF4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EF78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EF7A   Length              0005 (5)\n-3EF7C   Flags               01 (1) 'Modification'\n-3EF7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EF81 CENTRAL HEADER #29    02014B50 (33639248)\n-3EF85 Created Zip Spec      14 (20) '2.0'\n-3EF86 Created OS            00 (0) 'MS-DOS'\n-3EF87 Extract Zip Spec      14 (20) '2.0'\n-3EF88 Extract OS            00 (0) 'MS-DOS'\n-3EF89 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EF8B Compression Method    0000 (0) 'Stored'\n-3EF8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EF91 CRC                   F33C5BFA (4080819194)\n-3EF95 Compressed Size       000004BD (1213)\n-3EF99 Uncompressed Size     000004BD (1213)\n-3EF9D Filename Length       0033 (51)\n-3EF9F Extra Length          0009 (9)\n-3EFA1 Comment Length        0000 (0)\n-3EFA3 Disk Start            0000 (0)\n-3EFA5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3EFA7 Ext File Attributes   00000000 (0)\n-3EFAB Local Header Offset   0000BD6D (48493)\n-3EFAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3EFAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3EFE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3EFE4   Length              0005 (5)\n-3EFE6   Flags               01 (1) 'Modification'\n-3EFE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3EFEB CENTRAL HEADER #30    02014B50 (33639248)\n-3EFEF Created Zip Spec      14 (20) '2.0'\n-3EFF0 Created OS            00 (0) 'MS-DOS'\n-3EFF1 Extract Zip Spec      14 (20) '2.0'\n-3EFF2 Extract OS            00 (0) 'MS-DOS'\n-3EFF3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3EFF5 Compression Method    0000 (0) 'Stored'\n-3EFF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3EFFB CRC                   B27D0F80 (2994540416)\n-3EFFF Compressed Size       00002A19 (10777)\n-3F003 Uncompressed Size     00002A19 (10777)\n-3F007 Filename Length       002E (46)\n-3F009 Extra Length          0009 (9)\n-3F00B Comment Length        0000 (0)\n-3F00D Disk Start            0000 (0)\n-3F00F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F011 Ext File Attributes   00000000 (0)\n-3F015 Local Header Offset   0000C294 (49812)\n-3F019 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F019: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F047 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F049   Length              0005 (5)\n-3F04B   Flags               01 (1) 'Modification'\n-3F04C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F050 CENTRAL HEADER #31    02014B50 (33639248)\n-3F054 Created Zip Spec      14 (20) '2.0'\n-3F055 Created OS            00 (0) 'MS-DOS'\n-3F056 Extract Zip Spec      14 (20) '2.0'\n-3F057 Extract OS            00 (0) 'MS-DOS'\n-3F058 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F05A Compression Method    0000 (0) 'Stored'\n-3F05C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F060 CRC                   2A67D5E8 (711448040)\n-3F064 Compressed Size       00000C0C (3084)\n-3F068 Uncompressed Size     00000C0C (3084)\n-3F06C Filename Length       0036 (54)\n-3F06E Extra Length          0009 (9)\n-3F070 Comment Length        0000 (0)\n-3F072 Disk Start            0000 (0)\n-3F074 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F076 Ext File Attributes   00000000 (0)\n-3F07A Local Header Offset   0000ED12 (60690)\n-3F07E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F07E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F0B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F0B6   Length              0005 (5)\n-3F0B8   Flags               01 (1) 'Modification'\n-3F0B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F0BD CENTRAL HEADER #32    02014B50 (33639248)\n-3F0C1 Created Zip Spec      14 (20) '2.0'\n-3F0C2 Created OS            00 (0) 'MS-DOS'\n-3F0C3 Extract Zip Spec      14 (20) '2.0'\n-3F0C4 Extract OS            00 (0) 'MS-DOS'\n-3F0C5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F0C7 Compression Method    0000 (0) 'Stored'\n-3F0C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F0CD CRC                   7483DD2E (1954798894)\n-3F0D1 Compressed Size       000008BC (2236)\n-3F0D5 Uncompressed Size     000008BC (2236)\n-3F0D9 Filename Length       0032 (50)\n-3F0DB Extra Length          0009 (9)\n-3F0DD Comment Length        0000 (0)\n-3F0DF Disk Start            0000 (0)\n-3F0E1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F0E3 Ext File Attributes   00000000 (0)\n-3F0E7 Local Header Offset   0000F98B (63883)\n-3F0EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F0EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F11D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F11F   Length              0005 (5)\n-3F121   Flags               01 (1) 'Modification'\n-3F122   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F126 CENTRAL HEADER #33    02014B50 (33639248)\n-3F12A Created Zip Spec      14 (20) '2.0'\n-3F12B Created OS            00 (0) 'MS-DOS'\n-3F12C Extract Zip Spec      14 (20) '2.0'\n-3F12D Extract OS            00 (0) 'MS-DOS'\n-3F12E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F130 Compression Method    0000 (0) 'Stored'\n-3F132 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F136 CRC                   6B4F2850 (1800349776)\n-3F13A Compressed Size       00000801 (2049)\n-3F13E Uncompressed Size     00000801 (2049)\n-3F142 Filename Length       002F (47)\n-3F144 Extra Length          0009 (9)\n-3F146 Comment Length        0000 (0)\n-3F148 Disk Start            0000 (0)\n-3F14A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F14C Ext File Attributes   00000000 (0)\n-3F150 Local Header Offset   000102B0 (66224)\n-3F154 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F154: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F183 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F185   Length              0005 (5)\n-3F187   Flags               01 (1) 'Modification'\n-3F188   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F18C CENTRAL HEADER #34    02014B50 (33639248)\n-3F190 Created Zip Spec      14 (20) '2.0'\n-3F191 Created OS            00 (0) 'MS-DOS'\n-3F192 Extract Zip Spec      14 (20) '2.0'\n-3F193 Extract OS            00 (0) 'MS-DOS'\n-3F194 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F196 Compression Method    0000 (0) 'Stored'\n-3F198 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F19C CRC                   065E383D (106838077)\n-3F1A0 Compressed Size       00000B59 (2905)\n-3F1A4 Uncompressed Size     00000B59 (2905)\n-3F1A8 Filename Length       0031 (49)\n-3F1AA Extra Length          0009 (9)\n-3F1AC Comment Length        0000 (0)\n-3F1AE Disk Start            0000 (0)\n-3F1B0 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F1B2 Ext File Attributes   00000000 (0)\n-3F1B6 Local Header Offset   00010B17 (68375)\n-3F1BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F1BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F1EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F1ED   Length              0005 (5)\n-3F1EF   Flags               01 (1) 'Modification'\n-3F1F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F1F4 CENTRAL HEADER #35    02014B50 (33639248)\n-3F1F8 Created Zip Spec      14 (20) '2.0'\n-3F1F9 Created OS            00 (0) 'MS-DOS'\n-3F1FA Extract Zip Spec      14 (20) '2.0'\n-3F1FB Extract OS            00 (0) 'MS-DOS'\n-3F1FC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F1FE Compression Method    0000 (0) 'Stored'\n-3F200 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F204 CRC                   33B4FA9F (867498655)\n-3F208 Compressed Size       00000A57 (2647)\n-3F20C Uncompressed Size     00000A57 (2647)\n-3F210 Filename Length       0036 (54)\n-3F212 Extra Length          0009 (9)\n-3F214 Comment Length        0000 (0)\n-3F216 Disk Start            0000 (0)\n-3F218 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F21A Ext File Attributes   00000000 (0)\n-3F21E Local Header Offset   000116D8 (71384)\n-3F222 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F222: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F258 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F25A   Length              0005 (5)\n-3F25C   Flags               01 (1) 'Modification'\n-3F25D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F261 CENTRAL HEADER #36    02014B50 (33639248)\n-3F265 Created Zip Spec      14 (20) '2.0'\n-3F266 Created OS            00 (0) 'MS-DOS'\n-3F267 Extract Zip Spec      14 (20) '2.0'\n-3F268 Extract OS            00 (0) 'MS-DOS'\n-3F269 General Purpose Flag  0000 (0)\n-3F26B Compression Method    0000 (0) 'Stored'\n-3F26D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F271 CRC                   00000000 (0)\n-3F275 Compressed Size       00000000 (0)\n-3F279 Uncompressed Size     00000000 (0)\n-3F27D Filename Length       0025 (37)\n-3F27F Extra Length          0009 (9)\n-3F281 Comment Length        0000 (0)\n-3F283 Disk Start            0000 (0)\n-3F285 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F287 Ext File Attributes   00000000 (0)\n-3F28B Local Header Offset   0001219C (74140)\n-3F28F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F28F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F2B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F2B6   Length              0005 (5)\n-3F2B8   Flags               01 (1) 'Modification'\n-3F2B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F2BD CENTRAL HEADER #37    02014B50 (33639248)\n-3F2C1 Created Zip Spec      14 (20) '2.0'\n-3F2C2 Created OS            00 (0) 'MS-DOS'\n-3F2C3 Extract Zip Spec      14 (20) '2.0'\n-3F2C4 Extract OS            00 (0) 'MS-DOS'\n-3F2C5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F2C7 Compression Method    0000 (0) 'Stored'\n-3F2C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F2CD CRC                   99A066B3 (2577426099)\n-3F2D1 Compressed Size       00000A40 (2624)\n-3F2D5 Uncompressed Size     00000A40 (2624)\n-3F2D9 Filename Length       0041 (65)\n-3F2DB Extra Length          0009 (9)\n-3F2DD Comment Length        0000 (0)\n-3F2DF Disk Start            0000 (0)\n-3F2E1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F2E3 Ext File Attributes   00000000 (0)\n-3F2E7 Local Header Offset   000121E8 (74216)\n-3F2EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F2EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F32C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F32E   Length              0005 (5)\n-3F330   Flags               01 (1) 'Modification'\n-3F331   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F335 CENTRAL HEADER #38    02014B50 (33639248)\n-3F339 Created Zip Spec      14 (20) '2.0'\n-3F33A Created OS            00 (0) 'MS-DOS'\n-3F33B Extract Zip Spec      14 (20) '2.0'\n-3F33C Extract OS            00 (0) 'MS-DOS'\n-3F33D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F33F Compression Method    0000 (0) 'Stored'\n-3F341 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F345 CRC                   8FC61B83 (2412125059)\n-3F349 Compressed Size       00000F15 (3861)\n-3F34D Uncompressed Size     00000F15 (3861)\n-3F351 Filename Length       0042 (66)\n-3F353 Extra Length          0009 (9)\n-3F355 Comment Length        0000 (0)\n-3F357 Disk Start            0000 (0)\n-3F359 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F35B Ext File Attributes   00000000 (0)\n-3F35F Local Header Offset   00012CA0 (76960)\n-3F363 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F363: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F3A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F3A7   Length              0005 (5)\n-3F3A9   Flags               01 (1) 'Modification'\n-3F3AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F3AE CENTRAL HEADER #39    02014B50 (33639248)\n-3F3B2 Created Zip Spec      14 (20) '2.0'\n-3F3B3 Created OS            00 (0) 'MS-DOS'\n-3F3B4 Extract Zip Spec      14 (20) '2.0'\n-3F3B5 Extract OS            00 (0) 'MS-DOS'\n-3F3B6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F3B8 Compression Method    0000 (0) 'Stored'\n-3F3BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F3BE CRC                   C36126A3 (3277924003)\n-3F3C2 Compressed Size       00000CF2 (3314)\n-3F3C6 Uncompressed Size     00000CF2 (3314)\n-3F3CA Filename Length       003F (63)\n-3F3CC Extra Length          0009 (9)\n-3F3CE Comment Length        0000 (0)\n-3F3D0 Disk Start            0000 (0)\n-3F3D2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F3D4 Ext File Attributes   00000000 (0)\n-3F3D8 Local Header Offset   00013C2E (80942)\n-3F3DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F3DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F41B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F41D   Length              0005 (5)\n-3F41F   Flags               01 (1) 'Modification'\n-3F420   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F424 CENTRAL HEADER #40    02014B50 (33639248)\n-3F428 Created Zip Spec      14 (20) '2.0'\n-3F429 Created OS            00 (0) 'MS-DOS'\n-3F42A Extract Zip Spec      14 (20) '2.0'\n-3F42B Extract OS            00 (0) 'MS-DOS'\n-3F42C General Purpose Flag  0000 (0)\n-3F42E Compression Method    0000 (0) 'Stored'\n-3F430 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F434 CRC                   00000000 (0)\n-3F438 Compressed Size       00000000 (0)\n-3F43C Uncompressed Size     00000000 (0)\n-3F440 Filename Length       002D (45)\n-3F442 Extra Length          0009 (9)\n-3F444 Comment Length        0000 (0)\n-3F446 Disk Start            0000 (0)\n-3F448 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F44A Ext File Attributes   00000000 (0)\n-3F44E Local Header Offset   00014996 (84374)\n-3F452 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F452: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F47F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F481   Length              0005 (5)\n-3F483   Flags               01 (1) 'Modification'\n-3F484   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F488 CENTRAL HEADER #41    02014B50 (33639248)\n-3F48C Created Zip Spec      14 (20) '2.0'\n-3F48D Created OS            00 (0) 'MS-DOS'\n-3F48E Extract Zip Spec      14 (20) '2.0'\n-3F48F Extract OS            00 (0) 'MS-DOS'\n-3F490 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F492 Compression Method    0000 (0) 'Stored'\n-3F494 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F498 CRC                   C15189CF (3243346383)\n-3F49C Compressed Size       000006BB (1723)\n-3F4A0 Uncompressed Size     000006BB (1723)\n-3F4A4 Filename Length       0042 (66)\n-3F4A6 Extra Length          0009 (9)\n-3F4A8 Comment Length        0000 (0)\n-3F4AA Disk Start            0000 (0)\n-3F4AC Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F4AE Ext File Attributes   00000000 (0)\n-3F4B2 Local Header Offset   000149EA (84458)\n-3F4B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F4B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F4F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F4FA   Length              0005 (5)\n-3F4FC   Flags               01 (1) 'Modification'\n-3F4FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F501 CENTRAL HEADER #42    02014B50 (33639248)\n-3F505 Created Zip Spec      14 (20) '2.0'\n-3F506 Created OS            00 (0) 'MS-DOS'\n-3F507 Extract Zip Spec      14 (20) '2.0'\n-3F508 Extract OS            00 (0) 'MS-DOS'\n-3F509 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F50B Compression Method    0000 (0) 'Stored'\n-3F50D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F511 CRC                   48345DF3 (1211391475)\n-3F515 Compressed Size       00000ACD (2765)\n-3F519 Uncompressed Size     00000ACD (2765)\n-3F51D Filename Length       0047 (71)\n-3F51F Extra Length          0009 (9)\n-3F521 Comment Length        0000 (0)\n-3F523 Disk Start            0000 (0)\n-3F525 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F527 Ext File Attributes   00000000 (0)\n-3F52B Local Header Offset   0001511E (86302)\n-3F52F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F52F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F576 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F578   Length              0005 (5)\n-3F57A   Flags               01 (1) 'Modification'\n-3F57B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F57F CENTRAL HEADER #43    02014B50 (33639248)\n-3F583 Created Zip Spec      14 (20) '2.0'\n-3F584 Created OS            00 (0) 'MS-DOS'\n-3F585 Extract Zip Spec      14 (20) '2.0'\n-3F586 Extract OS            00 (0) 'MS-DOS'\n-3F587 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F589 Compression Method    0000 (0) 'Stored'\n-3F58B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F58F CRC                   8C150447 (2350187591)\n-3F593 Compressed Size       000009B8 (2488)\n-3F597 Uncompressed Size     000009B8 (2488)\n-3F59B Filename Length       0044 (68)\n-3F59D Extra Length          0009 (9)\n-3F59F Comment Length        0000 (0)\n-3F5A1 Disk Start            0000 (0)\n-3F5A3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F5A5 Ext File Attributes   00000000 (0)\n-3F5A9 Local Header Offset   00015C69 (89193)\n-3F5AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F5AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F5F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F5F3   Length              0005 (5)\n-3F5F5   Flags               01 (1) 'Modification'\n-3F5F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F5FA CENTRAL HEADER #44    02014B50 (33639248)\n-3F5FE Created Zip Spec      14 (20) '2.0'\n-3F5FF Created OS            00 (0) 'MS-DOS'\n-3F600 Extract Zip Spec      14 (20) '2.0'\n-3F601 Extract OS            00 (0) 'MS-DOS'\n-3F602 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F604 Compression Method    0000 (0) 'Stored'\n-3F606 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F60A CRC                   288B644A (680223818)\n-3F60E Compressed Size       0000079B (1947)\n-3F612 Uncompressed Size     0000079B (1947)\n-3F616 Filename Length       0041 (65)\n-3F618 Extra Length          0009 (9)\n-3F61A Comment Length        0000 (0)\n-3F61C Disk Start            0000 (0)\n-3F61E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F620 Ext File Attributes   00000000 (0)\n-3F624 Local Header Offset   0001669C (91804)\n-3F628 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F628: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F669 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F66B   Length              0005 (5)\n-3F66D   Flags               01 (1) 'Modification'\n-3F66E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F672 CENTRAL HEADER #45    02014B50 (33639248)\n-3F676 Created Zip Spec      14 (20) '2.0'\n-3F677 Created OS            00 (0) 'MS-DOS'\n-3F678 Extract Zip Spec      14 (20) '2.0'\n-3F679 Extract OS            00 (0) 'MS-DOS'\n-3F67A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F67C Compression Method    0000 (0) 'Stored'\n-3F67E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F682 CRC                   A6C8F390 (2798187408)\n-3F686 Compressed Size       00000C41 (3137)\n-3F68A Uncompressed Size     00000C41 (3137)\n-3F68E Filename Length       0040 (64)\n-3F690 Extra Length          0009 (9)\n-3F692 Comment Length        0000 (0)\n-3F694 Disk Start            0000 (0)\n-3F696 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F698 Ext File Attributes   00000000 (0)\n-3F69C Local Header Offset   00016EAF (93871)\n-3F6A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F6A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F6E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F6E2   Length              0005 (5)\n-3F6E4   Flags               01 (1) 'Modification'\n-3F6E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F6E9 CENTRAL HEADER #46    02014B50 (33639248)\n-3F6ED Created Zip Spec      14 (20) '2.0'\n-3F6EE Created OS            00 (0) 'MS-DOS'\n-3F6EF Extract Zip Spec      14 (20) '2.0'\n-3F6F0 Extract OS            00 (0) 'MS-DOS'\n-3F6F1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F6F3 Compression Method    0000 (0) 'Stored'\n-3F6F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F6F9 CRC                   7350CC44 (1934675012)\n-3F6FD Compressed Size       000005A3 (1443)\n-3F701 Uncompressed Size     000005A3 (1443)\n-3F705 Filename Length       003D (61)\n-3F707 Extra Length          0009 (9)\n-3F709 Comment Length        0000 (0)\n-3F70B Disk Start            0000 (0)\n-3F70D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F70F Ext File Attributes   00000000 (0)\n-3F713 Local Header Offset   00017B67 (97127)\n-3F717 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F717: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F754 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F756   Length              0005 (5)\n-3F758   Flags               01 (1) 'Modification'\n-3F759   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F75D CENTRAL HEADER #47    02014B50 (33639248)\n-3F761 Created Zip Spec      14 (20) '2.0'\n-3F762 Created OS            00 (0) 'MS-DOS'\n-3F763 Extract Zip Spec      14 (20) '2.0'\n-3F764 Extract OS            00 (0) 'MS-DOS'\n-3F765 General Purpose Flag  0000 (0)\n-3F767 Compression Method    0000 (0) 'Stored'\n-3F769 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F76D CRC                   00000000 (0)\n-3F771 Compressed Size       00000000 (0)\n-3F775 Uncompressed Size     00000000 (0)\n-3F779 Filename Length       002B (43)\n-3F77B Extra Length          0009 (9)\n-3F77D Comment Length        0000 (0)\n-3F77F Disk Start            0000 (0)\n-3F781 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F783 Ext File Attributes   00000000 (0)\n-3F787 Local Header Offset   0001817E (98686)\n-3F78B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F78B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F7B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F7B8   Length              0005 (5)\n-3F7BA   Flags               01 (1) 'Modification'\n-3F7BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F7BF CENTRAL HEADER #48    02014B50 (33639248)\n-3F7C3 Created Zip Spec      14 (20) '2.0'\n-3F7C4 Created OS            00 (0) 'MS-DOS'\n-3F7C5 Extract Zip Spec      14 (20) '2.0'\n-3F7C6 Extract OS            00 (0) 'MS-DOS'\n-3F7C7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F7C9 Compression Method    0000 (0) 'Stored'\n-3F7CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F7CF CRC                   53726EBB (1400008379)\n-3F7D3 Compressed Size       00000567 (1383)\n-3F7D7 Uncompressed Size     00000567 (1383)\n-3F7DB Filename Length       0045 (69)\n-3F7DD Extra Length          0009 (9)\n-3F7DF Comment Length        0000 (0)\n-3F7E1 Disk Start            0000 (0)\n-3F7E3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F7E5 Ext File Attributes   00000000 (0)\n-3F7E9 Local Header Offset   000181D0 (98768)\n-3F7ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F7ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F834   Length              0005 (5)\n-3F836   Flags               01 (1) 'Modification'\n-3F837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F83B CENTRAL HEADER #49    02014B50 (33639248)\n-3F83F Created Zip Spec      14 (20) '2.0'\n-3F840 Created OS            00 (0) 'MS-DOS'\n-3F841 Extract Zip Spec      14 (20) '2.0'\n-3F842 Extract OS            00 (0) 'MS-DOS'\n-3F843 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F845 Compression Method    0000 (0) 'Stored'\n-3F847 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F84B CRC                   C61A5369 (3323614057)\n-3F84F Compressed Size       00000C49 (3145)\n-3F853 Uncompressed Size     00000C49 (3145)\n-3F857 Filename Length       0040 (64)\n-3F859 Extra Length          0009 (9)\n-3F85B Comment Length        0000 (0)\n-3F85D Disk Start            0000 (0)\n-3F85F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F861 Ext File Attributes   00000000 (0)\n-3F865 Local Header Offset   000187B3 (100275)\n-3F869 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F869: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F8A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F8AB   Length              0005 (5)\n-3F8AD   Flags               01 (1) 'Modification'\n-3F8AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F8B2 CENTRAL HEADER #50    02014B50 (33639248)\n-3F8B6 Created Zip Spec      14 (20) '2.0'\n-3F8B7 Created OS            00 (0) 'MS-DOS'\n-3F8B8 Extract Zip Spec      14 (20) '2.0'\n-3F8B9 Extract OS            00 (0) 'MS-DOS'\n-3F8BA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F8BC Compression Method    0000 (0) 'Stored'\n-3F8BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F8C2 CRC                   4594C88A (1167378570)\n-3F8C6 Compressed Size       00000BC7 (3015)\n-3F8CA Uncompressed Size     00000BC7 (3015)\n-3F8CE Filename Length       0041 (65)\n-3F8D0 Extra Length          0009 (9)\n-3F8D2 Comment Length        0000 (0)\n-3F8D4 Disk Start            0000 (0)\n-3F8D6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F8D8 Ext File Attributes   00000000 (0)\n-3F8DC Local Header Offset   00019473 (103539)\n-3F8E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F8E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F921 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F923   Length              0005 (5)\n-3F925   Flags               01 (1) 'Modification'\n-3F926   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F92A CENTRAL HEADER #51    02014B50 (33639248)\n-3F92E Created Zip Spec      14 (20) '2.0'\n-3F92F Created OS            00 (0) 'MS-DOS'\n-3F930 Extract Zip Spec      14 (20) '2.0'\n-3F931 Extract OS            00 (0) 'MS-DOS'\n-3F932 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3F934 Compression Method    0000 (0) 'Stored'\n-3F936 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F93A CRC                   06EFE96C (116386156)\n-3F93E Compressed Size       000014BB (5307)\n-3F942 Uncompressed Size     000014BB (5307)\n-3F946 Filename Length       003E (62)\n-3F948 Extra Length          0009 (9)\n-3F94A Comment Length        0000 (0)\n-3F94C Disk Start            0000 (0)\n-3F94E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F950 Ext File Attributes   00000000 (0)\n-3F954 Local Header Offset   0001A0B2 (106674)\n-3F958 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F958: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F996 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F998   Length              0005 (5)\n-3F99A   Flags               01 (1) 'Modification'\n-3F99B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3F99F CENTRAL HEADER #52    02014B50 (33639248)\n-3F9A3 Created Zip Spec      14 (20) '2.0'\n-3F9A4 Created OS            00 (0) 'MS-DOS'\n-3F9A5 Extract Zip Spec      14 (20) '2.0'\n-3F9A6 Extract OS            00 (0) 'MS-DOS'\n-3F9A7 General Purpose Flag  0000 (0)\n-3F9A9 Compression Method    0000 (0) 'Stored'\n-3F9AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3F9AF CRC                   00000000 (0)\n-3F9B3 Compressed Size       00000000 (0)\n-3F9B7 Uncompressed Size     00000000 (0)\n-3F9BB Filename Length       002A (42)\n-3F9BD Extra Length          0009 (9)\n-3F9BF Comment Length        0000 (0)\n-3F9C1 Disk Start            0000 (0)\n-3F9C3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3F9C5 Ext File Attributes   00000000 (0)\n-3F9C9 Local Header Offset   0001B5E2 (112098)\n-3F9CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F9CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3F9F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3F9F9   Length              0005 (5)\n-3F9FB   Flags               01 (1) 'Modification'\n-3F9FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FA00 CENTRAL HEADER #53    02014B50 (33639248)\n-3FA04 Created Zip Spec      14 (20) '2.0'\n-3FA05 Created OS            00 (0) 'MS-DOS'\n-3FA06 Extract Zip Spec      14 (20) '2.0'\n-3FA07 Extract OS            00 (0) 'MS-DOS'\n-3FA08 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FA0A Compression Method    0000 (0) 'Stored'\n-3FA0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FA10 CRC                   28793399 (679031705)\n-3FA14 Compressed Size       00000DA7 (3495)\n-3FA18 Uncompressed Size     00000DA7 (3495)\n-3FA1C Filename Length       0039 (57)\n-3FA1E Extra Length          0009 (9)\n-3FA20 Comment Length        0000 (0)\n-3FA22 Disk Start            0000 (0)\n-3FA24 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FA26 Ext File Attributes   00000000 (0)\n-3FA2A Local Header Offset   0001B633 (112179)\n-3FA2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FA2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FA67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FA69   Length              0005 (5)\n-3FA6B   Flags               01 (1) 'Modification'\n-3FA6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FA70 CENTRAL HEADER #54    02014B50 (33639248)\n-3FA74 Created Zip Spec      14 (20) '2.0'\n-3FA75 Created OS            00 (0) 'MS-DOS'\n-3FA76 Extract Zip Spec      14 (20) '2.0'\n-3FA77 Extract OS            00 (0) 'MS-DOS'\n-3FA78 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FA7A Compression Method    0000 (0) 'Stored'\n-3FA7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FA80 CRC                   A3334B6D (2738047853)\n-3FA84 Compressed Size       00000CE7 (3303)\n-3FA88 Uncompressed Size     00000CE7 (3303)\n-3FA8C Filename Length       0046 (70)\n-3FA8E Extra Length          0009 (9)\n-3FA90 Comment Length        0000 (0)\n-3FA92 Disk Start            0000 (0)\n-3FA94 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FA96 Ext File Attributes   00000000 (0)\n-3FA9A Local Header Offset   0001C44A (115786)\n-3FA9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FA9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FAE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FAE6   Length              0005 (5)\n-3FAE8   Flags               01 (1) 'Modification'\n-3FAE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FAED CENTRAL HEADER #55    02014B50 (33639248)\n-3FAF1 Created Zip Spec      14 (20) '2.0'\n-3FAF2 Created OS            00 (0) 'MS-DOS'\n-3FAF3 Extract Zip Spec      14 (20) '2.0'\n-3FAF4 Extract OS            00 (0) 'MS-DOS'\n-3FAF5 General Purpose Flag  0000 (0)\n-3FAF7 Compression Method    0000 (0) 'Stored'\n-3FAF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FAFD CRC                   00000000 (0)\n-3FB01 Compressed Size       00000000 (0)\n-3FB05 Uncompressed Size     00000000 (0)\n-3FB09 Filename Length       0021 (33)\n-3FB0B Extra Length          0009 (9)\n-3FB0D Comment Length        0000 (0)\n-3FB0F Disk Start            0000 (0)\n-3FB11 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FB13 Ext File Attributes   00000000 (0)\n-3FB17 Local Header Offset   0001D1AE (119214)\n-3FB1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FB1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FB3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FB3E   Length              0005 (5)\n-3FB40   Flags               01 (1) 'Modification'\n-3FB41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FB45 CENTRAL HEADER #56    02014B50 (33639248)\n-3FB49 Created Zip Spec      14 (20) '2.0'\n-3FB4A Created OS            00 (0) 'MS-DOS'\n-3FB4B Extract Zip Spec      14 (20) '2.0'\n-3FB4C Extract OS            00 (0) 'MS-DOS'\n-3FB4D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FB4F Compression Method    0000 (0) 'Stored'\n-3FB51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FB55 CRC                   04A20B3B (77728571)\n-3FB59 Compressed Size       00000B66 (2918)\n-3FB5D Uncompressed Size     00000B66 (2918)\n-3FB61 Filename Length       0034 (52)\n-3FB63 Extra Length          0009 (9)\n-3FB65 Comment Length        0000 (0)\n-3FB67 Disk Start            0000 (0)\n-3FB69 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FB6B Ext File Attributes   00000000 (0)\n-3FB6F Local Header Offset   0001D1F6 (119286)\n-3FB73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FB73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FBA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FBA9   Length              0005 (5)\n-3FBAB   Flags               01 (1) 'Modification'\n-3FBAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FBB0 CENTRAL HEADER #57    02014B50 (33639248)\n-3FBB4 Created Zip Spec      14 (20) '2.0'\n-3FBB5 Created OS            00 (0) 'MS-DOS'\n-3FBB6 Extract Zip Spec      14 (20) '2.0'\n-3FBB7 Extract OS            00 (0) 'MS-DOS'\n-3FBB8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FBBA Compression Method    0000 (0) 'Stored'\n-3FBBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FBC0 CRC                   60C61EB2 (1623596722)\n-3FBC4 Compressed Size       00000460 (1120)\n-3FBC8 Uncompressed Size     00000460 (1120)\n-3FBCC Filename Length       003B (59)\n-3FBCE Extra Length          0009 (9)\n-3FBD0 Comment Length        0000 (0)\n-3FBD2 Disk Start            0000 (0)\n-3FBD4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FBD6 Ext File Attributes   00000000 (0)\n-3FBDA Local Header Offset   0001DDC7 (122311)\n-3FBDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FBDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FC19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FC1B   Length              0005 (5)\n-3FC1D   Flags               01 (1) 'Modification'\n-3FC1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FC22 CENTRAL HEADER #58    02014B50 (33639248)\n-3FC26 Created Zip Spec      14 (20) '2.0'\n-3FC27 Created OS            00 (0) 'MS-DOS'\n-3FC28 Extract Zip Spec      14 (20) '2.0'\n-3FC29 Extract OS            00 (0) 'MS-DOS'\n-3FC2A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FC2C Compression Method    0000 (0) 'Stored'\n-3FC2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FC32 CRC                   5AB1BA26 (1521596966)\n-3FC36 Compressed Size       00000E0A (3594)\n-3FC3A Uncompressed Size     00000E0A (3594)\n-3FC3E Filename Length       003C (60)\n-3FC40 Extra Length          0009 (9)\n-3FC42 Comment Length        0000 (0)\n-3FC44 Disk Start            0000 (0)\n-3FC46 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FC48 Ext File Attributes   00000000 (0)\n-3FC4C Local Header Offset   0001E299 (123545)\n-3FC50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FC50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FC8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FC8E   Length              0005 (5)\n-3FC90   Flags               01 (1) 'Modification'\n-3FC91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FC95 CENTRAL HEADER #59    02014B50 (33639248)\n-3FC99 Created Zip Spec      14 (20) '2.0'\n-3FC9A Created OS            00 (0) 'MS-DOS'\n-3FC9B Extract Zip Spec      14 (20) '2.0'\n-3FC9C Extract OS            00 (0) 'MS-DOS'\n-3FC9D General Purpose Flag  0000 (0)\n-3FC9F Compression Method    0000 (0) 'Stored'\n-3FCA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FCA5 CRC                   00000000 (0)\n-3FCA9 Compressed Size       00000000 (0)\n-3FCAD Uncompressed Size     00000000 (0)\n-3FCB1 Filename Length       002C (44)\n-3FCB3 Extra Length          0009 (9)\n-3FCB5 Comment Length        0000 (0)\n-3FCB7 Disk Start            0000 (0)\n-3FCB9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FCBB Ext File Attributes   00000000 (0)\n-3FCBF Local Header Offset   0001F116 (127254)\n-3FCC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FCC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FCEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FCF1   Length              0005 (5)\n-3FCF3   Flags               01 (1) 'Modification'\n-3FCF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FCF8 CENTRAL HEADER #60    02014B50 (33639248)\n-3FCFC Created Zip Spec      14 (20) '2.0'\n-3FCFD Created OS            00 (0) 'MS-DOS'\n-3FCFE Extract Zip Spec      14 (20) '2.0'\n-3FCFF Extract OS            00 (0) 'MS-DOS'\n-3FD00 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FD02 Compression Method    0000 (0) 'Stored'\n-3FD04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FD08 CRC                   ED364E79 (3979759225)\n-3FD0C Compressed Size       000008DD (2269)\n-3FD10 Uncompressed Size     000008DD (2269)\n-3FD14 Filename Length       0052 (82)\n-3FD16 Extra Length          0009 (9)\n-3FD18 Comment Length        0000 (0)\n-3FD1A Disk Start            0000 (0)\n-3FD1C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FD1E Ext File Attributes   00000000 (0)\n-3FD22 Local Header Offset   0001F169 (127337)\n-3FD26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FD26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FD78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FD7A   Length              0005 (5)\n-3FD7C   Flags               01 (1) 'Modification'\n-3FD7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FD81 CENTRAL HEADER #61    02014B50 (33639248)\n-3FD85 Created Zip Spec      14 (20) '2.0'\n-3FD86 Created OS            00 (0) 'MS-DOS'\n-3FD87 Extract Zip Spec      14 (20) '2.0'\n-3FD88 Extract OS            00 (0) 'MS-DOS'\n-3FD89 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FD8B Compression Method    0000 (0) 'Stored'\n-3FD8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FD91 CRC                   07379C13 (121084947)\n-3FD95 Compressed Size       000003D4 (980)\n-3FD99 Uncompressed Size     000003D4 (980)\n-3FD9D Filename Length       0047 (71)\n-3FD9F Extra Length          0009 (9)\n-3FDA1 Comment Length        0000 (0)\n-3FDA3 Disk Start            0000 (0)\n-3FDA5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FDA7 Ext File Attributes   00000000 (0)\n-3FDAB Local Header Offset   0001FACF (129743)\n-3FDAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FDAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FDF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FDF8   Length              0005 (5)\n-3FDFA   Flags               01 (1) 'Modification'\n-3FDFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FDFF CENTRAL HEADER #62    02014B50 (33639248)\n-3FE03 Created Zip Spec      14 (20) '2.0'\n-3FE04 Created OS            00 (0) 'MS-DOS'\n-3FE05 Extract Zip Spec      14 (20) '2.0'\n-3FE06 Extract OS            00 (0) 'MS-DOS'\n-3FE07 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FE09 Compression Method    0000 (0) 'Stored'\n-3FE0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FE0F CRC                   AA1837AB (2853713835)\n-3FE13 Compressed Size       00000C62 (3170)\n-3FE17 Uncompressed Size     00000C62 (3170)\n-3FE1B Filename Length       004E (78)\n-3FE1D Extra Length          0009 (9)\n-3FE1F Comment Length        0000 (0)\n-3FE21 Disk Start            0000 (0)\n-3FE23 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FE25 Ext File Attributes   00000000 (0)\n-3FE29 Local Header Offset   0001FF21 (130849)\n-3FE2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FE2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FE7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FE7D   Length              0005 (5)\n-3FE7F   Flags               01 (1) 'Modification'\n-3FE80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FE84 CENTRAL HEADER #63    02014B50 (33639248)\n-3FE88 Created Zip Spec      14 (20) '2.0'\n-3FE89 Created OS            00 (0) 'MS-DOS'\n-3FE8A Extract Zip Spec      14 (20) '2.0'\n-3FE8B Extract OS            00 (0) 'MS-DOS'\n-3FE8C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FE8E Compression Method    0000 (0) 'Stored'\n-3FE90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FE94 CRC                   C4C68375 (3301344117)\n-3FE98 Compressed Size       0000081D (2077)\n-3FE9C Uncompressed Size     0000081D (2077)\n-3FEA0 Filename Length       003C (60)\n-3FEA2 Extra Length          0009 (9)\n-3FEA4 Comment Length        0000 (0)\n-3FEA6 Disk Start            0000 (0)\n-3FEA8 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FEAA Ext File Attributes   00000000 (0)\n-3FEAE Local Header Offset   00020C08 (134152)\n-3FEB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FEB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FEEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FEF0   Length              0005 (5)\n-3FEF2   Flags               01 (1) 'Modification'\n-3FEF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FEF7 CENTRAL HEADER #64    02014B50 (33639248)\n-3FEFB Created Zip Spec      14 (20) '2.0'\n-3FEFC Created OS            00 (0) 'MS-DOS'\n-3FEFD Extract Zip Spec      14 (20) '2.0'\n-3FEFE Extract OS            00 (0) 'MS-DOS'\n-3FEFF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FF01 Compression Method    0000 (0) 'Stored'\n-3FF03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FF07 CRC                   F9021EF9 (4177665785)\n-3FF0B Compressed Size       00000C7A (3194)\n-3FF0F Uncompressed Size     00000C7A (3194)\n-3FF13 Filename Length       0043 (67)\n-3FF15 Extra Length          0009 (9)\n-3FF17 Comment Length        0000 (0)\n-3FF19 Disk Start            0000 (0)\n-3FF1B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FF1D Ext File Attributes   00000000 (0)\n-3FF21 Local Header Offset   00021498 (136344)\n-3FF25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FF25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FF68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FF6A   Length              0005 (5)\n-3FF6C   Flags               01 (1) 'Modification'\n-3FF6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FF71 CENTRAL HEADER #65    02014B50 (33639248)\n-3FF75 Created Zip Spec      14 (20) '2.0'\n-3FF76 Created OS            00 (0) 'MS-DOS'\n-3FF77 Extract Zip Spec      14 (20) '2.0'\n-3FF78 Extract OS            00 (0) 'MS-DOS'\n-3FF79 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FF7B Compression Method    0000 (0) 'Stored'\n-3FF7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3FF81 CRC                   D8F5C90C (3639986444)\n-3FF85 Compressed Size       00000C3E (3134)\n-3FF89 Uncompressed Size     00000C3E (3134)\n-3FF8D Filename Length       004A (74)\n-3FF8F Extra Length          0009 (9)\n-3FF91 Comment Length        0000 (0)\n-3FF93 Disk Start            0000 (0)\n-3FF95 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-3FF97 Ext File Attributes   00000000 (0)\n-3FF9B Local Header Offset   0002218C (139660)\n-3FF9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FF9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3FFE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3FFEB   Length              0005 (5)\n-3FFED   Flags               01 (1) 'Modification'\n-3FFEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3FFF2 CENTRAL HEADER #66    02014B50 (33639248)\n-3FFF6 Created Zip Spec      14 (20) '2.0'\n-3FFF7 Created OS            00 (0) 'MS-DOS'\n-3FFF8 Extract Zip Spec      14 (20) '2.0'\n-3FFF9 Extract OS            00 (0) 'MS-DOS'\n-3FFFA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3FFFC Compression Method    0000 (0) 'Stored'\n-3FFFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40002 CRC                   F7E9DD6B (4159298923)\n-40006 Compressed Size       00000871 (2161)\n-4000A Uncompressed Size     00000871 (2161)\n-4000E Filename Length       004D (77)\n-40010 Extra Length          0009 (9)\n-40012 Comment Length        0000 (0)\n-40014 Disk Start            0000 (0)\n-40016 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40018 Ext File Attributes   00000000 (0)\n-4001C Local Header Offset   00022E4B (142923)\n-40020 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40020: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4006D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4006F   Length              0005 (5)\n-40071   Flags               01 (1) 'Modification'\n-40072   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40076 CENTRAL HEADER #67    02014B50 (33639248)\n-4007A Created Zip Spec      14 (20) '2.0'\n-4007B Created OS            00 (0) 'MS-DOS'\n-4007C Extract Zip Spec      14 (20) '2.0'\n-4007D Extract OS            00 (0) 'MS-DOS'\n-4007E General Purpose Flag  0000 (0)\n-40080 Compression Method    0000 (0) 'Stored'\n-40082 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40086 CRC                   00000000 (0)\n-4008A Compressed Size       00000000 (0)\n-4008E Uncompressed Size     00000000 (0)\n-40092 Filename Length       0029 (41)\n-40094 Extra Length          0009 (9)\n-40096 Comment Length        0000 (0)\n-40098 Disk Start            0000 (0)\n-4009A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-4009C Ext File Attributes   00000000 (0)\n-400A0 Local Header Offset   00023740 (145216)\n-400A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x400A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-400CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-400CF   Length              0005 (5)\n-400D1   Flags               01 (1) 'Modification'\n-400D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-400D6 CENTRAL HEADER #68    02014B50 (33639248)\n-400DA Created Zip Spec      14 (20) '2.0'\n-400DB Created OS            00 (0) 'MS-DOS'\n-400DC Extract Zip Spec      14 (20) '2.0'\n-400DD Extract OS            00 (0) 'MS-DOS'\n-400DE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-400E0 Compression Method    0000 (0) 'Stored'\n-400E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-400E6 CRC                   8DD7FA96 (2379741846)\n-400EA Compressed Size       00004F7F (20351)\n-400EE Uncompressed Size     00004F7F (20351)\n-400F2 Filename Length       0044 (68)\n-400F4 Extra Length          0009 (9)\n-400F6 Comment Length        0000 (0)\n-400F8 Disk Start            0000 (0)\n-400FA Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-400FC Ext File Attributes   00000000 (0)\n-40100 Local Header Offset   00023790 (145296)\n-40104 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40104: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40148 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4014A   Length              0005 (5)\n-4014C   Flags               01 (1) 'Modification'\n-4014D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40151 CENTRAL HEADER #69    02014B50 (33639248)\n-40155 Created Zip Spec      14 (20) '2.0'\n-40156 Created OS            00 (0) 'MS-DOS'\n-40157 Extract Zip Spec      14 (20) '2.0'\n-40158 Extract OS            00 (0) 'MS-DOS'\n-40159 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4015B Compression Method    0000 (0) 'Stored'\n-4015D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40161 CRC                   C31A43AC (3273278380)\n-40165 Compressed Size       00000A43 (2627)\n-40169 Uncompressed Size     00000A43 (2627)\n-4016D Filename Length       004B (75)\n-4016F Extra Length          0009 (9)\n-40171 Comment Length        0000 (0)\n-40173 Disk Start            0000 (0)\n-40175 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40177 Ext File Attributes   00000000 (0)\n-4017B Local Header Offset   0002878A (165770)\n-4017F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4017F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-401CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-401CC   Length              0005 (5)\n-401CE   Flags               01 (1) 'Modification'\n-401CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-401D3 CENTRAL HEADER #70    02014B50 (33639248)\n-401D7 Created Zip Spec      14 (20) '2.0'\n-401D8 Created OS            00 (0) 'MS-DOS'\n-401D9 Extract Zip Spec      14 (20) '2.0'\n-401DA Extract OS            00 (0) 'MS-DOS'\n-401DB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-401DD Compression Method    0000 (0) 'Stored'\n-401DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-401E3 CRC                   4CCC6F49 (1288466249)\n-401E7 Compressed Size       00000506 (1286)\n-401EB Uncompressed Size     00000506 (1286)\n-401EF Filename Length       0037 (55)\n-401F1 Extra Length          0009 (9)\n-401F3 Comment Length        0000 (0)\n-401F5 Disk Start            0000 (0)\n-401F7 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-401F9 Ext File Attributes   00000000 (0)\n-401FD Local Header Offset   0002924F (168527)\n-40201 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40201: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40238 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4023A   Length              0005 (5)\n-4023C   Flags               01 (1) 'Modification'\n-4023D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40241 CENTRAL HEADER #71    02014B50 (33639248)\n-40245 Created Zip Spec      14 (20) '2.0'\n-40246 Created OS            00 (0) 'MS-DOS'\n-40247 Extract Zip Spec      14 (20) '2.0'\n-40248 Extract OS            00 (0) 'MS-DOS'\n-40249 General Purpose Flag  0000 (0)\n-4024B Compression Method    0000 (0) 'Stored'\n-4024D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40251 CRC                   00000000 (0)\n-40255 Compressed Size       00000000 (0)\n-40259 Uncompressed Size     00000000 (0)\n-4025D Filename Length       001F (31)\n-4025F Extra Length          0009 (9)\n-40261 Comment Length        0000 (0)\n-40263 Disk Start            0000 (0)\n-40265 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40267 Ext File Attributes   00000000 (0)\n-4026B Local Header Offset   000297C3 (169923)\n-4026F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4026F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4028E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40290   Length              0005 (5)\n-40292   Flags               01 (1) 'Modification'\n-40293   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40297 CENTRAL HEADER #72    02014B50 (33639248)\n-4029B Created Zip Spec      14 (20) '2.0'\n-4029C Created OS            00 (0) 'MS-DOS'\n-4029D Extract Zip Spec      14 (20) '2.0'\n-4029E Extract OS            00 (0) 'MS-DOS'\n-4029F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-402A1 Compression Method    0000 (0) 'Stored'\n-402A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-402A7 CRC                   B342E8EC (3007506668)\n-402AB Compressed Size       0000096F (2415)\n-402AF Uncompressed Size     0000096F (2415)\n-402B3 Filename Length       004D (77)\n-402B5 Extra Length          0009 (9)\n-402B7 Comment Length        0000 (0)\n-402B9 Disk Start            0000 (0)\n-402BB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-402BD Ext File Attributes   00000000 (0)\n-402C1 Local Header Offset   00029809 (169993)\n-402C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x402C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40312 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40314   Length              0005 (5)\n-40316   Flags               01 (1) 'Modification'\n-40317   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-4031B CENTRAL HEADER #73    02014B50 (33639248)\n-4031F Created Zip Spec      14 (20) '2.0'\n-40320 Created OS            00 (0) 'MS-DOS'\n-40321 Extract Zip Spec      14 (20) '2.0'\n-40322 Extract OS            00 (0) 'MS-DOS'\n-40323 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40325 Compression Method    0000 (0) 'Stored'\n-40327 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4032B CRC                   CAD52129 (3402965289)\n-4032F Compressed Size       00003D87 (15751)\n-40333 Uncompressed Size     00003D87 (15751)\n-40337 Filename Length       0047 (71)\n-40339 Extra Length          0009 (9)\n-4033B Comment Length        0000 (0)\n-4033D Disk Start            0000 (0)\n-4033F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40341 Ext File Attributes   00000000 (0)\n-40345 Local Header Offset   0002A1FC (172540)\n-40349 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40349: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40390 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40392   Length              0005 (5)\n-40394   Flags               01 (1) 'Modification'\n-40395   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40399 CENTRAL HEADER #74    02014B50 (33639248)\n-4039D Created Zip Spec      14 (20) '2.0'\n-4039E Created OS            00 (0) 'MS-DOS'\n-4039F Extract Zip Spec      14 (20) '2.0'\n-403A0 Extract OS            00 (0) 'MS-DOS'\n-403A1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-403A3 Compression Method    0000 (0) 'Stored'\n-403A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-403A9 CRC                   47F26503 (1207067907)\n-403AD Compressed Size       000009C5 (2501)\n-403B1 Uncompressed Size     000009C5 (2501)\n-403B5 Filename Length       0045 (69)\n-403B7 Extra Length          0009 (9)\n-403B9 Comment Length        0000 (0)\n-403BB Disk Start            0000 (0)\n-403BD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-403BF Ext File Attributes   00000000 (0)\n-403C3 Local Header Offset   0002E001 (188417)\n-403C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x403C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4040C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4040E   Length              0005 (5)\n-40410   Flags               01 (1) 'Modification'\n-40411   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40415 CENTRAL HEADER #75    02014B50 (33639248)\n-40419 Created Zip Spec      14 (20) '2.0'\n-4041A Created OS            00 (0) 'MS-DOS'\n-4041B Extract Zip Spec      14 (20) '2.0'\n-4041C Extract OS            00 (0) 'MS-DOS'\n-4041D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4041F Compression Method    0000 (0) 'Stored'\n-40421 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40425 CRC                   19F0D91C (435214620)\n-40429 Compressed Size       00000D07 (3335)\n-4042D Uncompressed Size     00000D07 (3335)\n-40431 Filename Length       0046 (70)\n-40433 Extra Length          0009 (9)\n-40435 Comment Length        0000 (0)\n-40437 Disk Start            0000 (0)\n-40439 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-4043B Ext File Attributes   00000000 (0)\n-4043F Local Header Offset   0002EA42 (191042)\n-40443 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40443: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40489 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4048B   Length              0005 (5)\n-4048D   Flags               01 (1) 'Modification'\n-4048E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40492 CENTRAL HEADER #76    02014B50 (33639248)\n-40496 Created Zip Spec      14 (20) '2.0'\n-40497 Created OS            00 (0) 'MS-DOS'\n-40498 Extract Zip Spec      14 (20) '2.0'\n-40499 Extract OS            00 (0) 'MS-DOS'\n-4049A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4049C Compression Method    0000 (0) 'Stored'\n-4049E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-404A2 CRC                   7E8AFFB4 (2123038644)\n-404A6 Compressed Size       000007C3 (1987)\n-404AA Uncompressed Size     000007C3 (1987)\n-404AE Filename Length       0046 (70)\n-404B0 Extra Length          0009 (9)\n-404B2 Comment Length        0000 (0)\n-404B4 Disk Start            0000 (0)\n-404B6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-404B8 Ext File Attributes   00000000 (0)\n-404BC Local Header Offset   0002F7C6 (194502)\n-404C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x404C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40506 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40508   Length              0005 (5)\n-4050A   Flags               01 (1) 'Modification'\n-4050B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-4050F CENTRAL HEADER #77    02014B50 (33639248)\n-40513 Created Zip Spec      14 (20) '2.0'\n-40514 Created OS            00 (0) 'MS-DOS'\n-40515 Extract Zip Spec      14 (20) '2.0'\n-40516 Extract OS            00 (0) 'MS-DOS'\n-40517 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40519 Compression Method    0000 (0) 'Stored'\n-4051B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4051F CRC                   BE623F70 (3194109808)\n-40523 Compressed Size       00001B70 (7024)\n-40527 Uncompressed Size     00001B70 (7024)\n-4052B Filename Length       0033 (51)\n-4052D Extra Length          0009 (9)\n-4052F Comment Length        0000 (0)\n-40531 Disk Start            0000 (0)\n-40533 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40535 Ext File Attributes   00000000 (0)\n-40539 Local Header Offset   00030006 (196614)\n-4053D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4053D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40570 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40572   Length              0005 (5)\n-40574   Flags               01 (1) 'Modification'\n-40575   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40579 CENTRAL HEADER #78    02014B50 (33639248)\n-4057D Created Zip Spec      14 (20) '2.0'\n-4057E Created OS            00 (0) 'MS-DOS'\n-4057F Extract Zip Spec      14 (20) '2.0'\n-40580 Extract OS            00 (0) 'MS-DOS'\n-40581 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40583 Compression Method    0000 (0) 'Stored'\n-40585 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40589 CRC                   C31D4A4B (3273476683)\n-4058D Compressed Size       0000120B (4619)\n-40591 Uncompressed Size     0000120B (4619)\n-40595 Filename Length       0039 (57)\n-40597 Extra Length          0009 (9)\n-40599 Comment Length        0000 (0)\n-4059B Disk Start            0000 (0)\n-4059D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-4059F Ext File Attributes   00000000 (0)\n-405A3 Local Header Offset   00031BE0 (203744)\n-405A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x405A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-405E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-405E2   Length              0005 (5)\n-405E4   Flags               01 (1) 'Modification'\n-405E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-405E9 CENTRAL HEADER #79    02014B50 (33639248)\n-405ED Created Zip Spec      14 (20) '2.0'\n-405EE Created OS            00 (0) 'MS-DOS'\n-405EF Extract Zip Spec      14 (20) '2.0'\n-405F0 Extract OS            00 (0) 'MS-DOS'\n-405F1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-405F3 Compression Method    0000 (0) 'Stored'\n-405F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-405F9 CRC                   B4E1FAB5 (3034708661)\n-405FD Compressed Size       0000180E (6158)\n-40601 Uncompressed Size     0000180E (6158)\n-40605 Filename Length       0036 (54)\n-40607 Extra Length          0009 (9)\n-40609 Comment Length        0000 (0)\n-4060B Disk Start            0000 (0)\n-4060D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-4060F Ext File Attributes   00000000 (0)\n-40613 Local Header Offset   00032E5B (208475)\n-40617 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40617: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4064D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4064F   Length              0005 (5)\n-40651   Flags               01 (1) 'Modification'\n-40652   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40656 CENTRAL HEADER #80    02014B50 (33639248)\n-4065A Created Zip Spec      14 (20) '2.0'\n-4065B Created OS            00 (0) 'MS-DOS'\n-4065C Extract Zip Spec      14 (20) '2.0'\n-4065D Extract OS            00 (0) 'MS-DOS'\n-4065E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40660 Compression Method    0000 (0) 'Stored'\n-40662 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40666 CRC                   5668569D (1449678493)\n-4066A Compressed Size       00000C7B (3195)\n-4066E Uncompressed Size     00000C7B (3195)\n-40672 Filename Length       0037 (55)\n-40674 Extra Length          0009 (9)\n-40676 Comment Length        0000 (0)\n-40678 Disk Start            0000 (0)\n-4067A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-4067C Ext File Attributes   00000000 (0)\n-40680 Local Header Offset   000346D6 (214742)\n-40684 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40684: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-406BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-406BD   Length              0005 (5)\n-406BF   Flags               01 (1) 'Modification'\n-406C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-406C4 CENTRAL HEADER #81    02014B50 (33639248)\n-406C8 Created Zip Spec      14 (20) '2.0'\n-406C9 Created OS            00 (0) 'MS-DOS'\n-406CA Extract Zip Spec      14 (20) '2.0'\n-406CB Extract OS            00 (0) 'MS-DOS'\n-406CC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-406CE Compression Method    0000 (0) 'Stored'\n-406D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-406D4 CRC                   EA525DAF (3931266479)\n-406D8 Compressed Size       000004C1 (1217)\n-406DC Uncompressed Size     000004C1 (1217)\n-406E0 Filename Length       003D (61)\n-406E2 Extra Length          0009 (9)\n-406E4 Comment Length        0000 (0)\n-406E6 Disk Start            0000 (0)\n-406E8 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-406EA Ext File Attributes   00000000 (0)\n-406EE Local Header Offset   000353BF (218047)\n-406F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x406F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4072F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40731   Length              0005 (5)\n-40733   Flags               01 (1) 'Modification'\n-40734   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40738 CENTRAL HEADER #82    02014B50 (33639248)\n-4073C Created Zip Spec      14 (20) '2.0'\n-4073D Created OS            00 (0) 'MS-DOS'\n-4073E Extract Zip Spec      14 (20) '2.0'\n-4073F Extract OS            00 (0) 'MS-DOS'\n-40740 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40742 Compression Method    0000 (0) 'Stored'\n-40744 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40748 CRC                   6E98A8DB (1855498459)\n-4074C Compressed Size       0000063C (1596)\n-40750 Uncompressed Size     0000063C (1596)\n-40754 Filename Length       003F (63)\n-40756 Extra Length          0009 (9)\n-40758 Comment Length        0000 (0)\n-4075A Disk Start            0000 (0)\n-4075C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-4075E Ext File Attributes   00000000 (0)\n-40762 Local Header Offset   000358F4 (219380)\n-40766 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40766: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-407A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-407A7   Length              0005 (5)\n-407A9   Flags               01 (1) 'Modification'\n-407AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-407AE CENTRAL HEADER #83    02014B50 (33639248)\n-407B2 Created Zip Spec      14 (20) '2.0'\n-407B3 Created OS            00 (0) 'MS-DOS'\n-407B4 Extract Zip Spec      14 (20) '2.0'\n-407B5 Extract OS            00 (0) 'MS-DOS'\n-407B6 General Purpose Flag  0000 (0)\n-407B8 Compression Method    0000 (0) 'Stored'\n-407BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-407BE CRC                   00000000 (0)\n-407C2 Compressed Size       00000000 (0)\n-407C6 Uncompressed Size     00000000 (0)\n-407CA Filename Length       0025 (37)\n-407CC Extra Length          0009 (9)\n-407CE Comment Length        0000 (0)\n-407D0 Disk Start            0000 (0)\n-407D2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-407D4 Ext File Attributes   00000000 (0)\n-407D8 Local Header Offset   00035FA6 (221094)\n-407DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x407DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40801 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40803   Length              0005 (5)\n-40805   Flags               01 (1) 'Modification'\n-40806   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-4080A CENTRAL HEADER #84    02014B50 (33639248)\n-4080E Created Zip Spec      14 (20) '2.0'\n-4080F Created OS            00 (0) 'MS-DOS'\n-40810 Extract Zip Spec      14 (20) '2.0'\n-40811 Extract OS            00 (0) 'MS-DOS'\n-40812 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40814 Compression Method    0000 (0) 'Stored'\n-40816 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4081A CRC                   96165FE8 (2518048744)\n-4081E Compressed Size       00000B47 (2887)\n-40822 Uncompressed Size     00000B47 (2887)\n-40826 Filename Length       0048 (72)\n-40828 Extra Length          0009 (9)\n-4082A Comment Length        0000 (0)\n-4082C Disk Start            0000 (0)\n-4082E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40830 Ext File Attributes   00000000 (0)\n-40834 Local Header Offset   00035FF2 (221170)\n-40838 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40838: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40880 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40882   Length              0005 (5)\n-40884   Flags               01 (1) 'Modification'\n-40885   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40889 CENTRAL HEADER #85    02014B50 (33639248)\n-4088D Created Zip Spec      14 (20) '2.0'\n-4088E Created OS            00 (0) 'MS-DOS'\n-4088F Extract Zip Spec      14 (20) '2.0'\n-40890 Extract OS            00 (0) 'MS-DOS'\n-40891 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40893 Compression Method    0000 (0) 'Stored'\n-40895 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40899 CRC                   BB15446F (3138733167)\n-4089D Compressed Size       00000540 (1344)\n-408A1 Uncompressed Size     00000540 (1344)\n-408A5 Filename Length       0045 (69)\n-408A7 Extra Length          0009 (9)\n-408A9 Comment Length        0000 (0)\n-408AB Disk Start            0000 (0)\n-408AD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-408AF Ext File Attributes   00000000 (0)\n-408B3 Local Header Offset   00036BB8 (224184)\n-408B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x408B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-408FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-408FE   Length              0005 (5)\n-40900   Flags               01 (1) 'Modification'\n-40901   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40905 CENTRAL HEADER #86    02014B50 (33639248)\n-40909 Created Zip Spec      14 (20) '2.0'\n-4090A Created OS            00 (0) 'MS-DOS'\n-4090B Extract Zip Spec      14 (20) '2.0'\n-4090C Extract OS            00 (0) 'MS-DOS'\n-4090D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4090F Compression Method    0000 (0) 'Stored'\n-40911 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40915 CRC                   C656CCE4 (3327577316)\n-40919 Compressed Size       00000872 (2162)\n-4091D Uncompressed Size     00000872 (2162)\n-40921 Filename Length       0047 (71)\n-40923 Extra Length          0009 (9)\n-40925 Comment Length        0000 (0)\n-40927 Disk Start            0000 (0)\n-40929 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-4092B Ext File Attributes   00000000 (0)\n-4092F Local Header Offset   00037174 (225652)\n-40933 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03ED8 DATA DESCRIPTOR       08074B50 (134695760)\n+03EDC CRC                   3DF8163B (1039668795)\n+03EE0 Compressed Size       00000116 (278)\n+03EE4 Uncompressed Size     00000116 (278)\n+\n+03EE8 LOCAL HEADER #11      04034B50 (67324752)\n+03EEC Extract Zip Spec      14 (20) '2.0'\n+03EED Extract OS            00 (0) 'MS-DOS'\n+03EEE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+03EF0 Compression Method    0000 (0) 'Stored'\n+03EF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03EF6 CRC                   00000000 (0)\n+03EFA Compressed Size       00000000 (0)\n+03EFE Uncompressed Size     00000000 (0)\n+03F02 Filename Length       0058 (88)\n+03F04 Extra Length          0009 (9)\n+03F06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F60   Length              0005 (5)\n+03F62   Flags               01 (1) 'Modification'\n+03F63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03F67 PAYLOAD\n+\n+0423B DATA DESCRIPTOR       08074B50 (134695760)\n+0423F CRC                   7138BB7F (1899543423)\n+04243 Compressed Size       000002D4 (724)\n+04247 Uncompressed Size     000002D4 (724)\n+\n+0424B LOCAL HEADER #12      04034B50 (67324752)\n+0424F Extract Zip Spec      14 (20) '2.0'\n+04250 Extract OS            00 (0) 'MS-DOS'\n+04251 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+04253 Compression Method    0000 (0) 'Stored'\n+04255 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04259 CRC                   00000000 (0)\n+0425D Compressed Size       00000000 (0)\n+04261 Uncompressed Size     00000000 (0)\n+04265 Filename Length       0052 (82)\n+04267 Extra Length          0009 (9)\n+04269 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4269: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+042BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+042BD   Length              0005 (5)\n+042BF   Flags               01 (1) 'Modification'\n+042C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+042C4 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+0437C DATA DESCRIPTOR       08074B50 (134695760)\n+04380 CRC                   0D088F60 (218664800)\n+04384 Compressed Size       000000B8 (184)\n+04388 Uncompressed Size     000000B8 (184)\n+\n+0438C LOCAL HEADER #13      04034B50 (67324752)\n+04390 Extract Zip Spec      14 (20) '2.0'\n+04391 Extract OS            00 (0) 'MS-DOS'\n+04392 General Purpose Flag  0000 (0)\n+04394 Compression Method    0000 (0) 'Stored'\n+04396 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0439A CRC                   00000000 (0)\n+0439E Compressed Size       00000000 (0)\n+043A2 Uncompressed Size     00000000 (0)\n+043A6 Filename Length       000F (15)\n+043A8 Extra Length          0009 (9)\n+043AA Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43AA: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+043B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+043BB   Length              0005 (5)\n+043BD   Flags               01 (1) 'Modification'\n+043BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+043C2 LOCAL HEADER #14      04034B50 (67324752)\n+043C6 Extract Zip Spec      14 (20) '2.0'\n+043C7 Extract OS            00 (0) 'MS-DOS'\n+043C8 General Purpose Flag  0000 (0)\n+043CA Compression Method    0000 (0) 'Stored'\n+043CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+043D0 CRC                   00000000 (0)\n+043D4 Compressed Size       00000000 (0)\n+043D8 Uncompressed Size     00000000 (0)\n+043DC Filename Length       0020 (32)\n+043DE Extra Length          0009 (9)\n+043E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04400 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04402   Length              0005 (5)\n+04404   Flags               01 (1) 'Modification'\n+04405   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04409 LOCAL HEADER #15      04034B50 (67324752)\n+0440D Extract Zip Spec      14 (20) '2.0'\n+0440E Extract OS            00 (0) 'MS-DOS'\n+0440F General Purpose Flag  0000 (0)\n+04411 Compression Method    0000 (0) 'Stored'\n+04413 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04417 CRC                   00000000 (0)\n+0441B Compressed Size       00000000 (0)\n+0441F Uncompressed Size     00000000 (0)\n+04423 Filename Length       0033 (51)\n+04425 Extra Length          0009 (9)\n+04427 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4427: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0445A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0445C   Length              0005 (5)\n+0445E   Flags               01 (1) 'Modification'\n+0445F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04463 LOCAL HEADER #16      04034B50 (67324752)\n+04467 Extract Zip Spec      14 (20) '2.0'\n+04468 Extract OS            00 (0) 'MS-DOS'\n+04469 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0446B Compression Method    0000 (0) 'Stored'\n+0446D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04471 CRC                   00000000 (0)\n+04475 Compressed Size       00000000 (0)\n+04479 Uncompressed Size     00000000 (0)\n+0447D Filename Length       0041 (65)\n+0447F Extra Length          0009 (9)\n+04481 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4481: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044C4   Length              0005 (5)\n+044C6   Flags               01 (1) 'Modification'\n+044C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+044CB DATA DESCRIPTOR       08074B50 (134695760)\n+044CF CRC                   00000000 (0)\n+044D3 Compressed Size       00000000 (0)\n+044D7 Uncompressed Size     00000000 (0)\n+\n+044DB LOCAL HEADER #17      04034B50 (67324752)\n+044DF Extract Zip Spec      14 (20) '2.0'\n+044E0 Extract OS            00 (0) 'MS-DOS'\n+044E1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+044E3 Compression Method    0000 (0) 'Stored'\n+044E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+044E9 CRC                   00000000 (0)\n+044ED Compressed Size       00000000 (0)\n+044F1 Uncompressed Size     00000000 (0)\n+044F5 Filename Length       003A (58)\n+044F7 Extra Length          0009 (9)\n+044F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04533 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04535   Length              0005 (5)\n+04537   Flags               01 (1) 'Modification'\n+04538   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0453C PAYLOAD\n+\n+050DD DATA DESCRIPTOR       08074B50 (134695760)\n+050E1 CRC                   4FF02D0F (1341140239)\n+050E5 Compressed Size       00000BA1 (2977)\n+050E9 Uncompressed Size     00000BA1 (2977)\n+\n+050ED LOCAL HEADER #18      04034B50 (67324752)\n+050F1 Extract Zip Spec      14 (20) '2.0'\n+050F2 Extract OS            00 (0) 'MS-DOS'\n+050F3 General Purpose Flag  0000 (0)\n+050F5 Compression Method    0000 (0) 'Stored'\n+050F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+050FB CRC                   00000000 (0)\n+050FF Compressed Size       00000000 (0)\n+05103 Uncompressed Size     00000000 (0)\n+05107 Filename Length       0004 (4)\n+05109 Extra Length          0009 (9)\n+0510B Filename              'XXXX'\n+#\n+# WARNING: Offset 0x510B: Filename 'XXXX'\n+#          Zero length filename\n+#\n+0510F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05111   Length              0005 (5)\n+05113   Flags               01 (1) 'Modification'\n+05114   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05118 LOCAL HEADER #19      04034B50 (67324752)\n+0511C Extract Zip Spec      14 (20) '2.0'\n+0511D Extract OS            00 (0) 'MS-DOS'\n+0511E General Purpose Flag  0000 (0)\n+05120 Compression Method    0000 (0) 'Stored'\n+05122 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05126 CRC                   00000000 (0)\n+0512A Compressed Size       00000000 (0)\n+0512E Uncompressed Size     00000000 (0)\n+05132 Filename Length       000B (11)\n+05134 Extra Length          0009 (9)\n+05136 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5136: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05141 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05143   Length              0005 (5)\n+05145   Flags               01 (1) 'Modification'\n+05146   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0514A LOCAL HEADER #20      04034B50 (67324752)\n+0514E Extract Zip Spec      14 (20) '2.0'\n+0514F Extract OS            00 (0) 'MS-DOS'\n+05150 General Purpose Flag  0000 (0)\n+05152 Compression Method    0000 (0) 'Stored'\n+05154 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05158 CRC                   00000000 (0)\n+0515C Compressed Size       00000000 (0)\n+05160 Uncompressed Size     00000000 (0)\n+05164 Filename Length       0011 (17)\n+05166 Extra Length          0009 (9)\n+05168 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5168: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05179 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0517B   Length              0005 (5)\n+0517D   Flags               01 (1) 'Modification'\n+0517E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05182 LOCAL HEADER #21      04034B50 (67324752)\n+05186 Extract Zip Spec      14 (20) '2.0'\n+05187 Extract OS            00 (0) 'MS-DOS'\n+05188 General Purpose Flag  0000 (0)\n+0518A Compression Method    0000 (0) 'Stored'\n+0518C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05190 CRC                   00000000 (0)\n+05194 Compressed Size       00000000 (0)\n+05198 Uncompressed Size     00000000 (0)\n+0519C Filename Length       001A (26)\n+0519E Extra Length          0009 (9)\n+051A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+051BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+051BC   Length              0005 (5)\n+051BE   Flags               01 (1) 'Modification'\n+051BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+051C3 LOCAL HEADER #22      04034B50 (67324752)\n+051C7 Extract Zip Spec      14 (20) '2.0'\n+051C8 Extract OS            00 (0) 'MS-DOS'\n+051C9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+051CB Compression Method    0000 (0) 'Stored'\n+051CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+051D1 CRC                   00000000 (0)\n+051D5 Compressed Size       00000000 (0)\n+051D9 Uncompressed Size     00000000 (0)\n+051DD Filename Length       003A (58)\n+051DF Extra Length          0009 (9)\n+051E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0521B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0521D   Length              0005 (5)\n+0521F   Flags               01 (1) 'Modification'\n+05220   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05224 PAYLOAD\n+\n+05CB2 DATA DESCRIPTOR       08074B50 (134695760)\n+05CB6 CRC                   42A6419F (1118192031)\n+05CBA Compressed Size       00000A8E (2702)\n+05CBE Uncompressed Size     00000A8E (2702)\n+\n+05CC2 LOCAL HEADER #23      04034B50 (67324752)\n+05CC6 Extract Zip Spec      14 (20) '2.0'\n+05CC7 Extract OS            00 (0) 'MS-DOS'\n+05CC8 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+05CCA Compression Method    0000 (0) 'Stored'\n+05CCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05CD0 CRC                   00000000 (0)\n+05CD4 Compressed Size       00000000 (0)\n+05CD8 Uncompressed Size     00000000 (0)\n+05CDC Filename Length       0045 (69)\n+05CDE Extra Length          0009 (9)\n+05CE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5CE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05D25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05D27   Length              0005 (5)\n+05D29   Flags               01 (1) 'Modification'\n+05D2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05D2E PAYLOAD\n+\n+06DA4 DATA DESCRIPTOR       08074B50 (134695760)\n+06DA8 CRC                   3EF8A330 (1056482096)\n+06DAC Compressed Size       00001076 (4214)\n+06DB0 Uncompressed Size     00001076 (4214)\n+\n+06DB4 LOCAL HEADER #24      04034B50 (67324752)\n+06DB8 Extract Zip Spec      14 (20) '2.0'\n+06DB9 Extract OS            00 (0) 'MS-DOS'\n+06DBA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+06DBC Compression Method    0000 (0) 'Stored'\n+06DBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06DC2 CRC                   00000000 (0)\n+06DC6 Compressed Size       00000000 (0)\n+06DCA Uncompressed Size     00000000 (0)\n+06DCE Filename Length       0032 (50)\n+06DD0 Extra Length          0009 (9)\n+06DD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6DD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06E04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06E06   Length              0005 (5)\n+06E08   Flags               01 (1) 'Modification'\n+06E09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06E0D PAYLOAD\n+\n+07328 DATA DESCRIPTOR       08074B50 (134695760)\n+0732C CRC                   EEF0F134 (4008767796)\n+07330 Compressed Size       0000051B (1307)\n+07334 Uncompressed Size     0000051B (1307)\n+\n+07338 LOCAL HEADER #25      04034B50 (67324752)\n+0733C Extract Zip Spec      14 (20) '2.0'\n+0733D Extract OS            00 (0) 'MS-DOS'\n+0733E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+07340 Compression Method    0000 (0) 'Stored'\n+07342 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07346 CRC                   00000000 (0)\n+0734A Compressed Size       00000000 (0)\n+0734E Uncompressed Size     00000000 (0)\n+07352 Filename Length       002E (46)\n+07354 Extra Length          0009 (9)\n+07356 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7356: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07384 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07386   Length              0005 (5)\n+07388   Flags               01 (1) 'Modification'\n+07389   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0738D PAYLOAD\n+\n+0773A DATA DESCRIPTOR       08074B50 (134695760)\n+0773E CRC                   1D5DF166 (492695910)\n+07742 Compressed Size       000003AD (941)\n+07746 Uncompressed Size     000003AD (941)\n+\n+0774A LOCAL HEADER #26      04034B50 (67324752)\n+0774E Extract Zip Spec      14 (20) '2.0'\n+0774F Extract OS            00 (0) 'MS-DOS'\n+07750 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+07752 Compression Method    0000 (0) 'Stored'\n+07754 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07758 CRC                   00000000 (0)\n+0775C Compressed Size       00000000 (0)\n+07760 Uncompressed Size     00000000 (0)\n+07764 Filename Length       0035 (53)\n+07766 Extra Length          0009 (9)\n+07768 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7768: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0779D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0779F   Length              0005 (5)\n+077A1   Flags               01 (1) 'Modification'\n+077A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+077A6 PAYLOAD\n+\n+07CA5 DATA DESCRIPTOR       08074B50 (134695760)\n+07CA9 CRC                   FAB44FD1 (4206120913)\n+07CAD Compressed Size       000004FF (1279)\n+07CB1 Uncompressed Size     000004FF (1279)\n+\n+07CB5 LOCAL HEADER #27      04034B50 (67324752)\n+07CB9 Extract Zip Spec      14 (20) '2.0'\n+07CBA Extract OS            00 (0) 'MS-DOS'\n+07CBB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+07CBD Compression Method    0000 (0) 'Stored'\n+07CBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07CC3 CRC                   00000000 (0)\n+07CC7 Compressed Size       00000000 (0)\n+07CCB Uncompressed Size     00000000 (0)\n+07CCF Filename Length       0030 (48)\n+07CD1 Extra Length          0009 (9)\n+07CD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7CD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07D03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07D05   Length              0005 (5)\n+07D07   Flags               01 (1) 'Modification'\n+07D08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07D0C PAYLOAD\n+\n+08359 DATA DESCRIPTOR       08074B50 (134695760)\n+0835D CRC                   0D3C7289 (222065289)\n+08361 Compressed Size       0000064D (1613)\n+08365 Uncompressed Size     0000064D (1613)\n+\n+08369 LOCAL HEADER #28      04034B50 (67324752)\n+0836D Extract Zip Spec      14 (20) '2.0'\n+0836E Extract OS            00 (0) 'MS-DOS'\n+0836F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+08371 Compression Method    0000 (0) 'Stored'\n+08373 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08377 CRC                   00000000 (0)\n+0837B Compressed Size       00000000 (0)\n+0837F Uncompressed Size     00000000 (0)\n+08383 Filename Length       002B (43)\n+08385 Extra Length          0009 (9)\n+08387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+083B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+083B4   Length              0005 (5)\n+083B6   Flags               01 (1) 'Modification'\n+083B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+083BB PAYLOAD\n+\n+0BFF8 DATA DESCRIPTOR       08074B50 (134695760)\n+0BFFC CRC                   9A0F8216 (2584707606)\n+0C000 Compressed Size       00003C3D (15421)\n+0C004 Uncompressed Size     00003C3D (15421)\n+\n+0C008 LOCAL HEADER #29      04034B50 (67324752)\n+0C00C Extract Zip Spec      14 (20) '2.0'\n+0C00D Extract OS            00 (0) 'MS-DOS'\n+0C00E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0C010 Compression Method    0000 (0) 'Stored'\n+0C012 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C016 CRC                   00000000 (0)\n+0C01A Compressed Size       00000000 (0)\n+0C01E Uncompressed Size     00000000 (0)\n+0C022 Filename Length       0033 (51)\n+0C024 Extra Length          0009 (9)\n+0C026 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC026: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C059 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C05B   Length              0005 (5)\n+0C05D   Flags               01 (1) 'Modification'\n+0C05E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C062 PAYLOAD\n+\n+0C544 DATA DESCRIPTOR       08074B50 (134695760)\n+0C548 CRC                   5D4E898D (1565428109)\n+0C54C Compressed Size       000004E2 (1250)\n+0C550 Uncompressed Size     000004E2 (1250)\n+\n+0C554 LOCAL HEADER #30      04034B50 (67324752)\n+0C558 Extract Zip Spec      14 (20) '2.0'\n+0C559 Extract OS            00 (0) 'MS-DOS'\n+0C55A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0C55C Compression Method    0000 (0) 'Stored'\n+0C55E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C562 CRC                   00000000 (0)\n+0C566 Compressed Size       00000000 (0)\n+0C56A Uncompressed Size     00000000 (0)\n+0C56E Filename Length       002E (46)\n+0C570 Extra Length          0009 (9)\n+0C572 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC572: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C5A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C5A2   Length              0005 (5)\n+0C5A4   Flags               01 (1) 'Modification'\n+0C5A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C5A9 PAYLOAD\n+\n+0F0D3 DATA DESCRIPTOR       08074B50 (134695760)\n+0F0D7 CRC                   2CED0C75 (753732725)\n+0F0DB Compressed Size       00002B2A (11050)\n+0F0DF Uncompressed Size     00002B2A (11050)\n+\n+0F0E3 LOCAL HEADER #31      04034B50 (67324752)\n+0F0E7 Extract Zip Spec      14 (20) '2.0'\n+0F0E8 Extract OS            00 (0) 'MS-DOS'\n+0F0E9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0F0EB Compression Method    0000 (0) 'Stored'\n+0F0ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F0F1 CRC                   00000000 (0)\n+0F0F5 Compressed Size       00000000 (0)\n+0F0F9 Uncompressed Size     00000000 (0)\n+0F0FD Filename Length       0036 (54)\n+0F0FF Extra Length          0009 (9)\n+0F101 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF101: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F137 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F139   Length              0005 (5)\n+0F13B   Flags               01 (1) 'Modification'\n+0F13C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F140 PAYLOAD\n+\n+0FDB0 DATA DESCRIPTOR       08074B50 (134695760)\n+0FDB4 CRC                   C38A081C (3280603164)\n+0FDB8 Compressed Size       00000C70 (3184)\n+0FDBC Uncompressed Size     00000C70 (3184)\n+\n+0FDC0 LOCAL HEADER #32      04034B50 (67324752)\n+0FDC4 Extract Zip Spec      14 (20) '2.0'\n+0FDC5 Extract OS            00 (0) 'MS-DOS'\n+0FDC6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0FDC8 Compression Method    0000 (0) 'Stored'\n+0FDCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FDCE CRC                   00000000 (0)\n+0FDD2 Compressed Size       00000000 (0)\n+0FDD6 Uncompressed Size     00000000 (0)\n+0FDDA Filename Length       0032 (50)\n+0FDDC Extra Length          0009 (9)\n+0FDDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFDDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FE10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FE12   Length              0005 (5)\n+0FE14   Flags               01 (1) 'Modification'\n+0FE15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FE19 PAYLOAD\n+\n+1071D DATA DESCRIPTOR       08074B50 (134695760)\n+10721 CRC                   5D7F96AB (1568642731)\n+10725 Compressed Size       00000904 (2308)\n+10729 Uncompressed Size     00000904 (2308)\n+\n+1072D LOCAL HEADER #33      04034B50 (67324752)\n+10731 Extract Zip Spec      14 (20) '2.0'\n+10732 Extract OS            00 (0) 'MS-DOS'\n+10733 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+10735 Compression Method    0000 (0) 'Stored'\n+10737 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1073B CRC                   00000000 (0)\n+1073F Compressed Size       00000000 (0)\n+10743 Uncompressed Size     00000000 (0)\n+10747 Filename Length       002F (47)\n+10749 Extra Length          0009 (9)\n+1074B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1074B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1077A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1077C   Length              0005 (5)\n+1077E   Flags               01 (1) 'Modification'\n+1077F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10783 PAYLOAD\n+\n+10FBF DATA DESCRIPTOR       08074B50 (134695760)\n+10FC3 CRC                   509BAB75 (1352379253)\n+10FC7 Compressed Size       0000083C (2108)\n+10FCB Uncompressed Size     0000083C (2108)\n+\n+10FCF LOCAL HEADER #34      04034B50 (67324752)\n+10FD3 Extract Zip Spec      14 (20) '2.0'\n+10FD4 Extract OS            00 (0) 'MS-DOS'\n+10FD5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+10FD7 Compression Method    0000 (0) 'Stored'\n+10FD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10FDD CRC                   00000000 (0)\n+10FE1 Compressed Size       00000000 (0)\n+10FE5 Uncompressed Size     00000000 (0)\n+10FE9 Filename Length       0031 (49)\n+10FEB Extra Length          0009 (9)\n+10FED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10FED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1101E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11020   Length              0005 (5)\n+11022   Flags               01 (1) 'Modification'\n+11023   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11027 PAYLOAD\n+\n+11BC8 DATA DESCRIPTOR       08074B50 (134695760)\n+11BCC CRC                   C02150D4 (3223408852)\n+11BD0 Compressed Size       00000BA1 (2977)\n+11BD4 Uncompressed Size     00000BA1 (2977)\n+\n+11BD8 LOCAL HEADER #35      04034B50 (67324752)\n+11BDC Extract Zip Spec      14 (20) '2.0'\n+11BDD Extract OS            00 (0) 'MS-DOS'\n+11BDE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+11BE0 Compression Method    0000 (0) 'Stored'\n+11BE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11BE6 CRC                   00000000 (0)\n+11BEA Compressed Size       00000000 (0)\n+11BEE Uncompressed Size     00000000 (0)\n+11BF2 Filename Length       0036 (54)\n+11BF4 Extra Length          0009 (9)\n+11BF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11BF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11C2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11C2E   Length              0005 (5)\n+11C30   Flags               01 (1) 'Modification'\n+11C31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11C35 PAYLOAD\n+\n+126E3 DATA DESCRIPTOR       08074B50 (134695760)\n+126E7 CRC                   B34C7492 (3008132242)\n+126EB Compressed Size       00000AAE (2734)\n+126EF Uncompressed Size     00000AAE (2734)\n+\n+126F3 LOCAL HEADER #36      04034B50 (67324752)\n+126F7 Extract Zip Spec      14 (20) '2.0'\n+126F8 Extract OS            00 (0) 'MS-DOS'\n+126F9 General Purpose Flag  0000 (0)\n+126FB Compression Method    0000 (0) 'Stored'\n+126FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12701 CRC                   00000000 (0)\n+12705 Compressed Size       00000000 (0)\n+12709 Uncompressed Size     00000000 (0)\n+1270D Filename Length       0025 (37)\n+1270F Extra Length          0009 (9)\n+12711 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12711: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12736 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12738   Length              0005 (5)\n+1273A   Flags               01 (1) 'Modification'\n+1273B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1273F LOCAL HEADER #37      04034B50 (67324752)\n+12743 Extract Zip Spec      14 (20) '2.0'\n+12744 Extract OS            00 (0) 'MS-DOS'\n+12745 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+12747 Compression Method    0000 (0) 'Stored'\n+12749 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1274D CRC                   00000000 (0)\n+12751 Compressed Size       00000000 (0)\n+12755 Uncompressed Size     00000000 (0)\n+12759 Filename Length       0041 (65)\n+1275B Extra Length          0009 (9)\n+1275D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1275D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1279E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+127A0   Length              0005 (5)\n+127A2   Flags               01 (1) 'Modification'\n+127A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+127A7 PAYLOAD\n+\n+13235 DATA DESCRIPTOR       08074B50 (134695760)\n+13239 CRC                   812905CA (2166949322)\n+1323D Compressed Size       00000A8E (2702)\n+13241 Uncompressed Size     00000A8E (2702)\n+\n+13245 LOCAL HEADER #38      04034B50 (67324752)\n+13249 Extract Zip Spec      14 (20) '2.0'\n+1324A Extract OS            00 (0) 'MS-DOS'\n+1324B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1324D Compression Method    0000 (0) 'Stored'\n+1324F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13253 CRC                   00000000 (0)\n+13257 Compressed Size       00000000 (0)\n+1325B Uncompressed Size     00000000 (0)\n+1325F Filename Length       0042 (66)\n+13261 Extra Length          0009 (9)\n+13263 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13263: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+132A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+132A7   Length              0005 (5)\n+132A9   Flags               01 (1) 'Modification'\n+132AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+132AE PAYLOAD\n+\n+1422E DATA DESCRIPTOR       08074B50 (134695760)\n+14232 CRC                   D4CAE0D6 (3570065622)\n+14236 Compressed Size       00000F80 (3968)\n+1423A Uncompressed Size     00000F80 (3968)\n+\n+1423E LOCAL HEADER #39      04034B50 (67324752)\n+14242 Extract Zip Spec      14 (20) '2.0'\n+14243 Extract OS            00 (0) 'MS-DOS'\n+14244 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+14246 Compression Method    0000 (0) 'Stored'\n+14248 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1424C CRC                   00000000 (0)\n+14250 Compressed Size       00000000 (0)\n+14254 Uncompressed Size     00000000 (0)\n+14258 Filename Length       003F (63)\n+1425A Extra Length          0009 (9)\n+1425C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1425C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1429B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1429D   Length              0005 (5)\n+1429F   Flags               01 (1) 'Modification'\n+142A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+142A4 PAYLOAD\n+\n+14FEE DATA DESCRIPTOR       08074B50 (134695760)\n+14FF2 CRC                   9C44854A (2621736266)\n+14FF6 Compressed Size       00000D4A (3402)\n+14FFA Uncompressed Size     00000D4A (3402)\n+\n+14FFE LOCAL HEADER #40      04034B50 (67324752)\n+15002 Extract Zip Spec      14 (20) '2.0'\n+15003 Extract OS            00 (0) 'MS-DOS'\n+15004 General Purpose Flag  0000 (0)\n+15006 Compression Method    0000 (0) 'Stored'\n+15008 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1500C CRC                   00000000 (0)\n+15010 Compressed Size       00000000 (0)\n+15014 Uncompressed Size     00000000 (0)\n+15018 Filename Length       002D (45)\n+1501A Extra Length          0009 (9)\n+1501C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1501C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15049 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1504B   Length              0005 (5)\n+1504D   Flags               01 (1) 'Modification'\n+1504E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+15052 LOCAL HEADER #41      04034B50 (67324752)\n+15056 Extract Zip Spec      14 (20) '2.0'\n+15057 Extract OS            00 (0) 'MS-DOS'\n+15058 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1505A Compression Method    0000 (0) 'Stored'\n+1505C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15060 CRC                   00000000 (0)\n+15064 Compressed Size       00000000 (0)\n+15068 Uncompressed Size     00000000 (0)\n+1506C Filename Length       0042 (66)\n+1506E Extra Length          0009 (9)\n+15070 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15070: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+150B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+150B4   Length              0005 (5)\n+150B6   Flags               01 (1) 'Modification'\n+150B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+150BB PAYLOAD\n+\n+157A6 DATA DESCRIPTOR       08074B50 (134695760)\n+157AA CRC                   F46C8898 (4100753560)\n+157AE Compressed Size       000006EB (1771)\n+157B2 Uncompressed Size     000006EB (1771)\n+\n+157B6 LOCAL HEADER #42      04034B50 (67324752)\n+157BA Extract Zip Spec      14 (20) '2.0'\n+157BB Extract OS            00 (0) 'MS-DOS'\n+157BC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+157BE Compression Method    0000 (0) 'Stored'\n+157C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+157C4 CRC                   00000000 (0)\n+157C8 Compressed Size       00000000 (0)\n+157CC Uncompressed Size     00000000 (0)\n+157D0 Filename Length       0047 (71)\n+157D2 Extra Length          0009 (9)\n+157D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x157D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1581B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1581D   Length              0005 (5)\n+1581F   Flags               01 (1) 'Modification'\n+15820   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15824 PAYLOAD\n+\n+16337 DATA DESCRIPTOR       08074B50 (134695760)\n+1633B CRC                   82A5648F (2191877263)\n+1633F Compressed Size       00000B13 (2835)\n+16343 Uncompressed Size     00000B13 (2835)\n+\n+16347 LOCAL HEADER #43      04034B50 (67324752)\n+1634B Extract Zip Spec      14 (20) '2.0'\n+1634C Extract OS            00 (0) 'MS-DOS'\n+1634D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1634F Compression Method    0000 (0) 'Stored'\n+16351 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16355 CRC                   00000000 (0)\n+16359 Compressed Size       00000000 (0)\n+1635D Uncompressed Size     00000000 (0)\n+16361 Filename Length       0044 (68)\n+16363 Extra Length          0009 (9)\n+16365 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16365: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+163A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+163AB   Length              0005 (5)\n+163AD   Flags               01 (1) 'Modification'\n+163AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+163B2 PAYLOAD\n+\n+16DB0 DATA DESCRIPTOR       08074B50 (134695760)\n+16DB4 CRC                   DA27253B (3659998523)\n+16DB8 Compressed Size       000009FE (2558)\n+16DBC Uncompressed Size     000009FE (2558)\n+\n+16DC0 LOCAL HEADER #44      04034B50 (67324752)\n+16DC4 Extract Zip Spec      14 (20) '2.0'\n+16DC5 Extract OS            00 (0) 'MS-DOS'\n+16DC6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16DC8 Compression Method    0000 (0) 'Stored'\n+16DCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16DCE CRC                   00000000 (0)\n+16DD2 Compressed Size       00000000 (0)\n+16DD6 Uncompressed Size     00000000 (0)\n+16DDA Filename Length       0041 (65)\n+16DDC Extra Length          0009 (9)\n+16DDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16DDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16E1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16E21   Length              0005 (5)\n+16E23   Flags               01 (1) 'Modification'\n+16E24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+16E28 PAYLOAD\n+\n+175FD DATA DESCRIPTOR       08074B50 (134695760)\n+17601 CRC                   3AE3106C (987959404)\n+17605 Compressed Size       000007D5 (2005)\n+17609 Uncompressed Size     000007D5 (2005)\n+\n+1760D LOCAL HEADER #45      04034B50 (67324752)\n+17611 Extract Zip Spec      14 (20) '2.0'\n+17612 Extract OS            00 (0) 'MS-DOS'\n+17613 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+17615 Compression Method    0000 (0) 'Stored'\n+17617 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1761B CRC                   00000000 (0)\n+1761F Compressed Size       00000000 (0)\n+17623 Uncompressed Size     00000000 (0)\n+17627 Filename Length       0040 (64)\n+17629 Extra Length          0009 (9)\n+1762B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1762B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1766B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1766D   Length              0005 (5)\n+1766F   Flags               01 (1) 'Modification'\n+17670   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+17674 PAYLOAD\n+\n+18305 DATA DESCRIPTOR       08074B50 (134695760)\n+18309 CRC                   5241C10C (1380040972)\n+1830D Compressed Size       00000C91 (3217)\n+18311 Uncompressed Size     00000C91 (3217)\n+\n+18315 LOCAL HEADER #46      04034B50 (67324752)\n+18319 Extract Zip Spec      14 (20) '2.0'\n+1831A Extract OS            00 (0) 'MS-DOS'\n+1831B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1831D Compression Method    0000 (0) 'Stored'\n+1831F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18323 CRC                   00000000 (0)\n+18327 Compressed Size       00000000 (0)\n+1832B Uncompressed Size     00000000 (0)\n+1832F Filename Length       003D (61)\n+18331 Extra Length          0009 (9)\n+18333 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18333: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18370 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18372   Length              0005 (5)\n+18374   Flags               01 (1) 'Modification'\n+18375   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18379 PAYLOAD\n+\n+18946 DATA DESCRIPTOR       08074B50 (134695760)\n+1894A CRC                   30FBCCB4 (821808308)\n+1894E Compressed Size       000005CD (1485)\n+18952 Uncompressed Size     000005CD (1485)\n+\n+18956 LOCAL HEADER #47      04034B50 (67324752)\n+1895A Extract Zip Spec      14 (20) '2.0'\n+1895B Extract OS            00 (0) 'MS-DOS'\n+1895C General Purpose Flag  0000 (0)\n+1895E Compression Method    0000 (0) 'Stored'\n+18960 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18964 CRC                   00000000 (0)\n+18968 Compressed Size       00000000 (0)\n+1896C Uncompressed Size     00000000 (0)\n+18970 Filename Length       002B (43)\n+18972 Extra Length          0009 (9)\n+18974 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18974: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1899F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+189A1   Length              0005 (5)\n+189A3   Flags               01 (1) 'Modification'\n+189A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+189A8 LOCAL HEADER #48      04034B50 (67324752)\n+189AC Extract Zip Spec      14 (20) '2.0'\n+189AD Extract OS            00 (0) 'MS-DOS'\n+189AE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+189B0 Compression Method    0000 (0) 'Stored'\n+189B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+189B6 CRC                   00000000 (0)\n+189BA Compressed Size       00000000 (0)\n+189BE Uncompressed Size     00000000 (0)\n+189C2 Filename Length       0045 (69)\n+189C4 Extra Length          0009 (9)\n+189C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x189C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18A0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18A0D   Length              0005 (5)\n+18A0F   Flags               01 (1) 'Modification'\n+18A10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18A14 PAYLOAD\n+\n+18FA6 DATA DESCRIPTOR       08074B50 (134695760)\n+18FAA CRC                   397FE7C7 (964683719)\n+18FAE Compressed Size       00000592 (1426)\n+18FB2 Uncompressed Size     00000592 (1426)\n+\n+18FB6 LOCAL HEADER #49      04034B50 (67324752)\n+18FBA Extract Zip Spec      14 (20) '2.0'\n+18FBB Extract OS            00 (0) 'MS-DOS'\n+18FBC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+18FBE Compression Method    0000 (0) 'Stored'\n+18FC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18FC4 CRC                   00000000 (0)\n+18FC8 Compressed Size       00000000 (0)\n+18FCC Uncompressed Size     00000000 (0)\n+18FD0 Filename Length       0040 (64)\n+18FD2 Extra Length          0009 (9)\n+18FD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18FD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19014 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19016   Length              0005 (5)\n+19018   Flags               01 (1) 'Modification'\n+19019   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1901D PAYLOAD\n+\n+19CCA DATA DESCRIPTOR       08074B50 (134695760)\n+19CCE CRC                   6571F019 (1701965849)\n+19CD2 Compressed Size       00000CAD (3245)\n+19CD6 Uncompressed Size     00000CAD (3245)\n+\n+19CDA LOCAL HEADER #50      04034B50 (67324752)\n+19CDE Extract Zip Spec      14 (20) '2.0'\n+19CDF Extract OS            00 (0) 'MS-DOS'\n+19CE0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+19CE2 Compression Method    0000 (0) 'Stored'\n+19CE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CE8 CRC                   00000000 (0)\n+19CEC Compressed Size       00000000 (0)\n+19CF0 Uncompressed Size     00000000 (0)\n+19CF4 Filename Length       0041 (65)\n+19CF6 Extra Length          0009 (9)\n+19CF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D3B   Length              0005 (5)\n+19D3D   Flags               01 (1) 'Modification'\n+19D3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+19D42 PAYLOAD\n+\n+1A96E DATA DESCRIPTOR       08074B50 (134695760)\n+1A972 CRC                   7A468FD9 (2051444697)\n+1A976 Compressed Size       00000C2C (3116)\n+1A97A Uncompressed Size     00000C2C (3116)\n+\n+1A97E LOCAL HEADER #51      04034B50 (67324752)\n+1A982 Extract Zip Spec      14 (20) '2.0'\n+1A983 Extract OS            00 (0) 'MS-DOS'\n+1A984 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1A986 Compression Method    0000 (0) 'Stored'\n+1A988 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1A98C CRC                   00000000 (0)\n+1A990 Compressed Size       00000000 (0)\n+1A994 Uncompressed Size     00000000 (0)\n+1A998 Filename Length       003E (62)\n+1A99A Extra Length          0009 (9)\n+1A99C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1A99C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1A9DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1A9DC   Length              0005 (5)\n+1A9DE   Flags               01 (1) 'Modification'\n+1A9DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1A9E3 PAYLOAD\n+\n+1BF5B DATA DESCRIPTOR       08074B50 (134695760)\n+1BF5F CRC                   FDA6691C (4255541532)\n+1BF63 Compressed Size       00001578 (5496)\n+1BF67 Uncompressed Size     00001578 (5496)\n+\n+1BF6B LOCAL HEADER #52      04034B50 (67324752)\n+1BF6F Extract Zip Spec      14 (20) '2.0'\n+1BF70 Extract OS            00 (0) 'MS-DOS'\n+1BF71 General Purpose Flag  0000 (0)\n+1BF73 Compression Method    0000 (0) 'Stored'\n+1BF75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1BF79 CRC                   00000000 (0)\n+1BF7D Compressed Size       00000000 (0)\n+1BF81 Uncompressed Size     00000000 (0)\n+1BF85 Filename Length       002A (42)\n+1BF87 Extra Length          0009 (9)\n+1BF89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1BF89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1BFB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1BFB5   Length              0005 (5)\n+1BFB7   Flags               01 (1) 'Modification'\n+1BFB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1BFBC LOCAL HEADER #53      04034B50 (67324752)\n+1BFC0 Extract Zip Spec      14 (20) '2.0'\n+1BFC1 Extract OS            00 (0) 'MS-DOS'\n+1BFC2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1BFC4 Compression Method    0000 (0) 'Stored'\n+1BFC6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1BFCA CRC                   00000000 (0)\n+1BFCE Compressed Size       00000000 (0)\n+1BFD2 Uncompressed Size     00000000 (0)\n+1BFD6 Filename Length       0039 (57)\n+1BFD8 Extra Length          0009 (9)\n+1BFDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1BFDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1C013 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1C015   Length              0005 (5)\n+1C017   Flags               01 (1) 'Modification'\n+1C018   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1C01C PAYLOAD\n+\n+1CE32 DATA DESCRIPTOR       08074B50 (134695760)\n+1CE36 CRC                   AD8A2A72 (2911513202)\n+1CE3A Compressed Size       00000E16 (3606)\n+1CE3E Uncompressed Size     00000E16 (3606)\n+\n+1CE42 LOCAL HEADER #54      04034B50 (67324752)\n+1CE46 Extract Zip Spec      14 (20) '2.0'\n+1CE47 Extract OS            00 (0) 'MS-DOS'\n+1CE48 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1CE4A Compression Method    0000 (0) 'Stored'\n+1CE4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1CE50 CRC                   00000000 (0)\n+1CE54 Compressed Size       00000000 (0)\n+1CE58 Uncompressed Size     00000000 (0)\n+1CE5C Filename Length       0046 (70)\n+1CE5E Extra Length          0009 (9)\n+1CE60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CE60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1CEA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1CEA8   Length              0005 (5)\n+1CEAA   Flags               01 (1) 'Modification'\n+1CEAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1CEAF PAYLOAD\n+\n+1DBFC DATA DESCRIPTOR       08074B50 (134695760)\n+1DC00 CRC                   EEF3CE31 (4008955441)\n+1DC04 Compressed Size       00000D4D (3405)\n+1DC08 Uncompressed Size     00000D4D (3405)\n+\n+1DC0C LOCAL HEADER #55      04034B50 (67324752)\n+1DC10 Extract Zip Spec      14 (20) '2.0'\n+1DC11 Extract OS            00 (0) 'MS-DOS'\n+1DC12 General Purpose Flag  0000 (0)\n+1DC14 Compression Method    0000 (0) 'Stored'\n+1DC16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1DC1A CRC                   00000000 (0)\n+1DC1E Compressed Size       00000000 (0)\n+1DC22 Uncompressed Size     00000000 (0)\n+1DC26 Filename Length       0021 (33)\n+1DC28 Extra Length          0009 (9)\n+1DC2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1DC2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1DC4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1DC4D   Length              0005 (5)\n+1DC4F   Flags               01 (1) 'Modification'\n+1DC50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1DC54 LOCAL HEADER #56      04034B50 (67324752)\n+1DC58 Extract Zip Spec      14 (20) '2.0'\n+1DC59 Extract OS            00 (0) 'MS-DOS'\n+1DC5A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1DC5C Compression Method    0000 (0) 'Stored'\n+1DC5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1DC62 CRC                   00000000 (0)\n+1DC66 Compressed Size       00000000 (0)\n+1DC6A Uncompressed Size     00000000 (0)\n+1DC6E Filename Length       0034 (52)\n+1DC70 Extra Length          0009 (9)\n+1DC72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1DC72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1DCA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1DCA8   Length              0005 (5)\n+1DCAA   Flags               01 (1) 'Modification'\n+1DCAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1DCAF PAYLOAD\n+\n+1E862 DATA DESCRIPTOR       08074B50 (134695760)\n+1E866 CRC                   B359713A (3008983354)\n+1E86A Compressed Size       00000BB3 (2995)\n+1E86E Uncompressed Size     00000BB3 (2995)\n+\n+1E872 LOCAL HEADER #57      04034B50 (67324752)\n+1E876 Extract Zip Spec      14 (20) '2.0'\n+1E877 Extract OS            00 (0) 'MS-DOS'\n+1E878 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1E87A Compression Method    0000 (0) 'Stored'\n+1E87C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1E880 CRC                   00000000 (0)\n+1E884 Compressed Size       00000000 (0)\n+1E888 Uncompressed Size     00000000 (0)\n+1E88C Filename Length       003B (59)\n+1E88E Extra Length          0009 (9)\n+1E890 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1E890: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1E8CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1E8CD   Length              0005 (5)\n+1E8CF   Flags               01 (1) 'Modification'\n+1E8D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1E8D4 PAYLOAD\n+\n+1ED52 DATA DESCRIPTOR       08074B50 (134695760)\n+1ED56 CRC                   D1906BB3 (3515902899)\n+1ED5A Compressed Size       0000047E (1150)\n+1ED5E Uncompressed Size     0000047E (1150)\n+\n+1ED62 LOCAL HEADER #58      04034B50 (67324752)\n+1ED66 Extract Zip Spec      14 (20) '2.0'\n+1ED67 Extract OS            00 (0) 'MS-DOS'\n+1ED68 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1ED6A Compression Method    0000 (0) 'Stored'\n+1ED6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1ED70 CRC                   00000000 (0)\n+1ED74 Compressed Size       00000000 (0)\n+1ED78 Uncompressed Size     00000000 (0)\n+1ED7C Filename Length       003C (60)\n+1ED7E Extra Length          0009 (9)\n+1ED80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1ED80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1EDBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1EDBE   Length              0005 (5)\n+1EDC0   Flags               01 (1) 'Modification'\n+1EDC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1EDC5 PAYLOAD\n+\n+1FC25 DATA DESCRIPTOR       08074B50 (134695760)\n+1FC29 CRC                   0375CF6B (58052459)\n+1FC2D Compressed Size       00000E60 (3680)\n+1FC31 Uncompressed Size     00000E60 (3680)\n+\n+1FC35 LOCAL HEADER #59      04034B50 (67324752)\n+1FC39 Extract Zip Spec      14 (20) '2.0'\n+1FC3A Extract OS            00 (0) 'MS-DOS'\n+1FC3B General Purpose Flag  0000 (0)\n+1FC3D Compression Method    0000 (0) 'Stored'\n+1FC3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1FC43 CRC                   00000000 (0)\n+1FC47 Compressed Size       00000000 (0)\n+1FC4B Uncompressed Size     00000000 (0)\n+1FC4F Filename Length       002C (44)\n+1FC51 Extra Length          0009 (9)\n+1FC53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1FC53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1FC7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1FC81   Length              0005 (5)\n+1FC83   Flags               01 (1) 'Modification'\n+1FC84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1FC88 LOCAL HEADER #60      04034B50 (67324752)\n+1FC8C Extract Zip Spec      14 (20) '2.0'\n+1FC8D Extract OS            00 (0) 'MS-DOS'\n+1FC8E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1FC90 Compression Method    0000 (0) 'Stored'\n+1FC92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1FC96 CRC                   00000000 (0)\n+1FC9A Compressed Size       00000000 (0)\n+1FC9E Uncompressed Size     00000000 (0)\n+1FCA2 Filename Length       0052 (82)\n+1FCA4 Extra Length          0009 (9)\n+1FCA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1FCA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1FCF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1FCFA   Length              0005 (5)\n+1FCFC   Flags               01 (1) 'Modification'\n+1FCFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1FD01 PAYLOAD\n+\n+2061D DATA DESCRIPTOR       08074B50 (134695760)\n+20621 CRC                   D7F68AC0 (3623258816)\n+20625 Compressed Size       0000091C (2332)\n+20629 Uncompressed Size     0000091C (2332)\n+\n+2062D LOCAL HEADER #61      04034B50 (67324752)\n+20631 Extract Zip Spec      14 (20) '2.0'\n+20632 Extract OS            00 (0) 'MS-DOS'\n+20633 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+20635 Compression Method    0000 (0) 'Stored'\n+20637 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2063B CRC                   00000000 (0)\n+2063F Compressed Size       00000000 (0)\n+20643 Uncompressed Size     00000000 (0)\n+20647 Filename Length       0047 (71)\n+20649 Extra Length          0009 (9)\n+2064B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2064B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+20692 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+20694   Length              0005 (5)\n+20696   Flags               01 (1) 'Modification'\n+20697   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2069B PAYLOAD\n+\n+20A88 DATA DESCRIPTOR       08074B50 (134695760)\n+20A8C CRC                   3D7B6838 (1031497784)\n+20A90 Compressed Size       000003ED (1005)\n+20A94 Uncompressed Size     000003ED (1005)\n+\n+20A98 LOCAL HEADER #62      04034B50 (67324752)\n+20A9C Extract Zip Spec      14 (20) '2.0'\n+20A9D Extract OS            00 (0) 'MS-DOS'\n+20A9E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+20AA0 Compression Method    0000 (0) 'Stored'\n+20AA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+20AA6 CRC                   00000000 (0)\n+20AAA Compressed Size       00000000 (0)\n+20AAE Uncompressed Size     00000000 (0)\n+20AB2 Filename Length       004E (78)\n+20AB4 Extra Length          0009 (9)\n+20AB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x20AB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+20B04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+20B06   Length              0005 (5)\n+20B08   Flags               01 (1) 'Modification'\n+20B09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+20B0D PAYLOAD\n+\n+217C7 DATA DESCRIPTOR       08074B50 (134695760)\n+217CB CRC                   475F83BC (1197441980)\n+217CF Compressed Size       00000CBA (3258)\n+217D3 Uncompressed Size     00000CBA (3258)\n+\n+217D7 LOCAL HEADER #63      04034B50 (67324752)\n+217DB Extract Zip Spec      14 (20) '2.0'\n+217DC Extract OS            00 (0) 'MS-DOS'\n+217DD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+217DF Compression Method    0000 (0) 'Stored'\n+217E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+217E5 CRC                   00000000 (0)\n+217E9 Compressed Size       00000000 (0)\n+217ED Uncompressed Size     00000000 (0)\n+217F1 Filename Length       003C (60)\n+217F3 Extra Length          0009 (9)\n+217F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x217F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+21831 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+21833   Length              0005 (5)\n+21835   Flags               01 (1) 'Modification'\n+21836   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2183A PAYLOAD\n+\n+22095 DATA DESCRIPTOR       08074B50 (134695760)\n+22099 CRC                   97BCAA4D (2545723981)\n+2209D Compressed Size       0000085B (2139)\n+220A1 Uncompressed Size     0000085B (2139)\n+\n+220A5 LOCAL HEADER #64      04034B50 (67324752)\n+220A9 Extract Zip Spec      14 (20) '2.0'\n+220AA Extract OS            00 (0) 'MS-DOS'\n+220AB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+220AD Compression Method    0000 (0) 'Stored'\n+220AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+220B3 CRC                   00000000 (0)\n+220B7 Compressed Size       00000000 (0)\n+220BB Uncompressed Size     00000000 (0)\n+220BF Filename Length       0043 (67)\n+220C1 Extra Length          0009 (9)\n+220C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x220C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+22106 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+22108   Length              0005 (5)\n+2210A   Flags               01 (1) 'Modification'\n+2210B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2210F PAYLOAD\n+\n+22DF2 DATA DESCRIPTOR       08074B50 (134695760)\n+22DF6 CRC                   A0F529B3 (2700421555)\n+22DFA Compressed Size       00000CE3 (3299)\n+22DFE Uncompressed Size     00000CE3 (3299)\n+\n+22E02 LOCAL HEADER #65      04034B50 (67324752)\n+22E06 Extract Zip Spec      14 (20) '2.0'\n+22E07 Extract OS            00 (0) 'MS-DOS'\n+22E08 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+22E0A Compression Method    0000 (0) 'Stored'\n+22E0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+22E10 CRC                   00000000 (0)\n+22E14 Compressed Size       00000000 (0)\n+22E18 Uncompressed Size     00000000 (0)\n+22E1C Filename Length       004A (74)\n+22E1E Extra Length          0009 (9)\n+22E20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x22E20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+22E6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+22E6C   Length              0005 (5)\n+22E6E   Flags               01 (1) 'Modification'\n+22E6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+22E73 PAYLOAD\n+\n+23B06 DATA DESCRIPTOR       08074B50 (134695760)\n+23B0A CRC                   0978E7E9 (158918633)\n+23B0E Compressed Size       00000C93 (3219)\n+23B12 Uncompressed Size     00000C93 (3219)\n+\n+23B16 LOCAL HEADER #66      04034B50 (67324752)\n+23B1A Extract Zip Spec      14 (20) '2.0'\n+23B1B Extract OS            00 (0) 'MS-DOS'\n+23B1C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+23B1E Compression Method    0000 (0) 'Stored'\n+23B20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+23B24 CRC                   00000000 (0)\n+23B28 Compressed Size       00000000 (0)\n+23B2C Uncompressed Size     00000000 (0)\n+23B30 Filename Length       004D (77)\n+23B32 Extra Length          0009 (9)\n+23B34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23B34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+23B81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+23B83   Length              0005 (5)\n+23B85   Flags               01 (1) 'Modification'\n+23B86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+23B8A PAYLOAD\n+\n+24441 DATA DESCRIPTOR       08074B50 (134695760)\n+24445 CRC                   0929F211 (153743889)\n+24449 Compressed Size       000008B7 (2231)\n+2444D Uncompressed Size     000008B7 (2231)\n+\n+24451 LOCAL HEADER #67      04034B50 (67324752)\n+24455 Extract Zip Spec      14 (20) '2.0'\n+24456 Extract OS            00 (0) 'MS-DOS'\n+24457 General Purpose Flag  0000 (0)\n+24459 Compression Method    0000 (0) 'Stored'\n+2445B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2445F CRC                   00000000 (0)\n+24463 Compressed Size       00000000 (0)\n+24467 Uncompressed Size     00000000 (0)\n+2446B Filename Length       0029 (41)\n+2446D Extra Length          0009 (9)\n+2446F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2446F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+24498 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2449A   Length              0005 (5)\n+2449C   Flags               01 (1) 'Modification'\n+2449D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+244A1 LOCAL HEADER #68      04034B50 (67324752)\n+244A5 Extract Zip Spec      14 (20) '2.0'\n+244A6 Extract OS            00 (0) 'MS-DOS'\n+244A7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+244A9 Compression Method    0000 (0) 'Stored'\n+244AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+244AF CRC                   00000000 (0)\n+244B3 Compressed Size       00000000 (0)\n+244B7 Uncompressed Size     00000000 (0)\n+244BB Filename Length       0044 (68)\n+244BD Extra Length          0009 (9)\n+244BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x244BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+24503 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+24505   Length              0005 (5)\n+24507   Flags               01 (1) 'Modification'\n+24508   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2450C PAYLOAD\n+\n+2965F DATA DESCRIPTOR       08074B50 (134695760)\n+29663 CRC                   26D63221 (651571745)\n+29667 Compressed Size       00005153 (20819)\n+2966B Uncompressed Size     00005153 (20819)\n+\n+2966F LOCAL HEADER #69      04034B50 (67324752)\n+29673 Extract Zip Spec      14 (20) '2.0'\n+29674 Extract OS            00 (0) 'MS-DOS'\n+29675 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+29677 Compression Method    0000 (0) 'Stored'\n+29679 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2967D CRC                   00000000 (0)\n+29681 Compressed Size       00000000 (0)\n+29685 Uncompressed Size     00000000 (0)\n+29689 Filename Length       004B (75)\n+2968B Extra Length          0009 (9)\n+2968D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2968D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+296D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+296DA   Length              0005 (5)\n+296DC   Flags               01 (1) 'Modification'\n+296DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+296E1 PAYLOAD\n+\n+2A162 DATA DESCRIPTOR       08074B50 (134695760)\n+2A166 CRC                   16EA47E7 (384452583)\n+2A16A Compressed Size       00000A81 (2689)\n+2A16E Uncompressed Size     00000A81 (2689)\n+\n+2A172 LOCAL HEADER #70      04034B50 (67324752)\n+2A176 Extract Zip Spec      14 (20) '2.0'\n+2A177 Extract OS            00 (0) 'MS-DOS'\n+2A178 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2A17A Compression Method    0000 (0) 'Stored'\n+2A17C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2A180 CRC                   00000000 (0)\n+2A184 Compressed Size       00000000 (0)\n+2A188 Uncompressed Size     00000000 (0)\n+2A18C Filename Length       0037 (55)\n+2A18E Extra Length          0009 (9)\n+2A190 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2A190: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2A1C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2A1C9   Length              0005 (5)\n+2A1CB   Flags               01 (1) 'Modification'\n+2A1CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2A1D0 PAYLOAD\n+\n+2A6FA DATA DESCRIPTOR       08074B50 (134695760)\n+2A6FE CRC                   82826623 (2189583907)\n+2A702 Compressed Size       0000052A (1322)\n+2A706 Uncompressed Size     0000052A (1322)\n+\n+2A70A LOCAL HEADER #71      04034B50 (67324752)\n+2A70E Extract Zip Spec      14 (20) '2.0'\n+2A70F Extract OS            00 (0) 'MS-DOS'\n+2A710 General Purpose Flag  0000 (0)\n+2A712 Compression Method    0000 (0) 'Stored'\n+2A714 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2A718 CRC                   00000000 (0)\n+2A71C Compressed Size       00000000 (0)\n+2A720 Uncompressed Size     00000000 (0)\n+2A724 Filename Length       001F (31)\n+2A726 Extra Length          0009 (9)\n+2A728 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2A728: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2A747 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2A749   Length              0005 (5)\n+2A74B   Flags               01 (1) 'Modification'\n+2A74C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2A750 LOCAL HEADER #72      04034B50 (67324752)\n+2A754 Extract Zip Spec      14 (20) '2.0'\n+2A755 Extract OS            00 (0) 'MS-DOS'\n+2A756 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2A758 Compression Method    0000 (0) 'Stored'\n+2A75A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2A75E CRC                   00000000 (0)\n+2A762 Compressed Size       00000000 (0)\n+2A766 Uncompressed Size     00000000 (0)\n+2A76A Filename Length       004D (77)\n+2A76C Extra Length          0009 (9)\n+2A76E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2A76E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2A7BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2A7BD   Length              0005 (5)\n+2A7BF   Flags               01 (1) 'Modification'\n+2A7C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2A7C4 PAYLOAD\n+\n+2B166 DATA DESCRIPTOR       08074B50 (134695760)\n+2B16A CRC                   25BB24C3 (633021635)\n+2B16E Compressed Size       000009A2 (2466)\n+2B172 Uncompressed Size     000009A2 (2466)\n+\n+2B176 LOCAL HEADER #73      04034B50 (67324752)\n+2B17A Extract Zip Spec      14 (20) '2.0'\n+2B17B Extract OS            00 (0) 'MS-DOS'\n+2B17C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2B17E Compression Method    0000 (0) 'Stored'\n+2B180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2B184 CRC                   00000000 (0)\n+2B188 Compressed Size       00000000 (0)\n+2B18C Uncompressed Size     00000000 (0)\n+2B190 Filename Length       0047 (71)\n+2B192 Extra Length          0009 (9)\n+2B194 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B194: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2B1DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2B1DD   Length              0005 (5)\n+2B1DF   Flags               01 (1) 'Modification'\n+2B1E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2B1E4 PAYLOAD\n+\n+2F0C2 DATA DESCRIPTOR       08074B50 (134695760)\n+2F0C6 CRC                   9322DFB2 (2468536242)\n+2F0CA Compressed Size       00003EDE (16094)\n+2F0CE Uncompressed Size     00003EDE (16094)\n+\n+2F0D2 LOCAL HEADER #74      04034B50 (67324752)\n+2F0D6 Extract Zip Spec      14 (20) '2.0'\n+2F0D7 Extract OS            00 (0) 'MS-DOS'\n+2F0D8 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F0DA Compression Method    0000 (0) 'Stored'\n+2F0DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F0E0 CRC                   00000000 (0)\n+2F0E4 Compressed Size       00000000 (0)\n+2F0E8 Uncompressed Size     00000000 (0)\n+2F0EC Filename Length       0045 (69)\n+2F0EE Extra Length          0009 (9)\n+2F0F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F0F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F135 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F137   Length              0005 (5)\n+2F139   Flags               01 (1) 'Modification'\n+2F13A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2F13E PAYLOAD\n+\n+2FB45 DATA DESCRIPTOR       08074B50 (134695760)\n+2FB49 CRC                   EE2E13F4 (3995997172)\n+2FB4D Compressed Size       00000A07 (2567)\n+2FB51 Uncompressed Size     00000A07 (2567)\n+\n+2FB55 LOCAL HEADER #75      04034B50 (67324752)\n+2FB59 Extract Zip Spec      14 (20) '2.0'\n+2FB5A Extract OS            00 (0) 'MS-DOS'\n+2FB5B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2FB5D Compression Method    0000 (0) 'Stored'\n+2FB5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2FB63 CRC                   00000000 (0)\n+2FB67 Compressed Size       00000000 (0)\n+2FB6B Uncompressed Size     00000000 (0)\n+2FB6F Filename Length       0046 (70)\n+2FB71 Extra Length          0009 (9)\n+2FB73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2FB73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2FBB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2FBBB   Length              0005 (5)\n+2FBBD   Flags               01 (1) 'Modification'\n+2FBBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2FBC2 PAYLOAD\n+\n+3091B DATA DESCRIPTOR       08074B50 (134695760)\n+3091F CRC                   9044A5F3 (2420418035)\n+30923 Compressed Size       00000D59 (3417)\n+30927 Uncompressed Size     00000D59 (3417)\n+\n+3092B LOCAL HEADER #76      04034B50 (67324752)\n+3092F Extract Zip Spec      14 (20) '2.0'\n+30930 Extract OS            00 (0) 'MS-DOS'\n+30931 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+30933 Compression Method    0000 (0) 'Stored'\n+30935 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+30939 CRC                   00000000 (0)\n+3093D Compressed Size       00000000 (0)\n+30941 Uncompressed Size     00000000 (0)\n+30945 Filename Length       0046 (70)\n+30947 Extra Length          0009 (9)\n+30949 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30949: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3098F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+30991   Length              0005 (5)\n+30993   Flags               01 (1) 'Modification'\n+30994   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+30998 PAYLOAD\n+\n+31196 DATA DESCRIPTOR       08074B50 (134695760)\n+3119A CRC                   15CC2E88 (365702792)\n+3119E Compressed Size       000007FE (2046)\n+311A2 Uncompressed Size     000007FE (2046)\n+\n+311A6 LOCAL HEADER #77      04034B50 (67324752)\n+311AA Extract Zip Spec      14 (20) '2.0'\n+311AB Extract OS            00 (0) 'MS-DOS'\n+311AC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+311AE Compression Method    0000 (0) 'Stored'\n+311B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+311B4 CRC                   00000000 (0)\n+311B8 Compressed Size       00000000 (0)\n+311BC Uncompressed Size     00000000 (0)\n+311C0 Filename Length       0033 (51)\n+311C2 Extra Length          0009 (9)\n+311C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x311C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+311F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+311F9   Length              0005 (5)\n+311FB   Flags               01 (1) 'Modification'\n+311FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+31200 PAYLOAD\n+\n+32E52 DATA DESCRIPTOR       08074B50 (134695760)\n+32E56 CRC                   A00D3EBD (2685222589)\n+32E5A Compressed Size       00001C52 (7250)\n+32E5E Uncompressed Size     00001C52 (7250)\n+\n+32E62 LOCAL HEADER #78      04034B50 (67324752)\n+32E66 Extract Zip Spec      14 (20) '2.0'\n+32E67 Extract OS            00 (0) 'MS-DOS'\n+32E68 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+32E6A Compression Method    0000 (0) 'Stored'\n+32E6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+32E70 CRC                   00000000 (0)\n+32E74 Compressed Size       00000000 (0)\n+32E78 Uncompressed Size     00000000 (0)\n+32E7C Filename Length       0039 (57)\n+32E7E Extra Length          0009 (9)\n+32E80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x32E80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+32EB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+32EBB   Length              0005 (5)\n+32EBD   Flags               01 (1) 'Modification'\n+32EBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+32EC2 PAYLOAD\n+\n+3415E DATA DESCRIPTOR       08074B50 (134695760)\n+34162 CRC                   69F2CD2A (1777519914)\n+34166 Compressed Size       0000129C (4764)\n+3416A Uncompressed Size     0000129C (4764)\n+\n+3416E LOCAL HEADER #79      04034B50 (67324752)\n+34172 Extract Zip Spec      14 (20) '2.0'\n+34173 Extract OS            00 (0) 'MS-DOS'\n+34174 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+34176 Compression Method    0000 (0) 'Stored'\n+34178 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3417C CRC                   00000000 (0)\n+34180 Compressed Size       00000000 (0)\n+34184 Uncompressed Size     00000000 (0)\n+34188 Filename Length       0036 (54)\n+3418A Extra Length          0009 (9)\n+3418C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3418C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+341C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+341C4   Length              0005 (5)\n+341C6   Flags               01 (1) 'Modification'\n+341C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+341CB PAYLOAD\n+\n+35AA0 DATA DESCRIPTOR       08074B50 (134695760)\n+35AA4 CRC                   3A871853 (981932115)\n+35AA8 Compressed Size       000018D5 (6357)\n+35AAC Uncompressed Size     000018D5 (6357)\n+\n+35AB0 LOCAL HEADER #80      04034B50 (67324752)\n+35AB4 Extract Zip Spec      14 (20) '2.0'\n+35AB5 Extract OS            00 (0) 'MS-DOS'\n+35AB6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+35AB8 Compression Method    0000 (0) 'Stored'\n+35ABA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+35ABE CRC                   00000000 (0)\n+35AC2 Compressed Size       00000000 (0)\n+35AC6 Uncompressed Size     00000000 (0)\n+35ACA Filename Length       0037 (55)\n+35ACC Extra Length          0009 (9)\n+35ACE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35ACE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+35B05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+35B07   Length              0005 (5)\n+35B09   Flags               01 (1) 'Modification'\n+35B0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+35B0E PAYLOAD\n+\n+367F4 DATA DESCRIPTOR       08074B50 (134695760)\n+367F8 CRC                   7BC9467A (2076788346)\n+367FC Compressed Size       00000CE6 (3302)\n+36800 Uncompressed Size     00000CE6 (3302)\n+\n+36804 LOCAL HEADER #81      04034B50 (67324752)\n+36808 Extract Zip Spec      14 (20) '2.0'\n+36809 Extract OS            00 (0) 'MS-DOS'\n+3680A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3680C Compression Method    0000 (0) 'Stored'\n+3680E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+36812 CRC                   00000000 (0)\n+36816 Compressed Size       00000000 (0)\n+3681A Uncompressed Size     00000000 (0)\n+3681E Filename Length       003D (61)\n+36820 Extra Length          0009 (9)\n+36822 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36822: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3685F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+36861   Length              0005 (5)\n+36863   Flags               01 (1) 'Modification'\n+36864   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+36868 PAYLOAD\n+\n+36D50 DATA DESCRIPTOR       08074B50 (134695760)\n+36D54 CRC                   8442F5C1 (2218980801)\n+36D58 Compressed Size       000004E8 (1256)\n+36D5C Uncompressed Size     000004E8 (1256)\n+\n+36D60 LOCAL HEADER #82      04034B50 (67324752)\n+36D64 Extract Zip Spec      14 (20) '2.0'\n+36D65 Extract OS            00 (0) 'MS-DOS'\n+36D66 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+36D68 Compression Method    0000 (0) 'Stored'\n+36D6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+36D6E CRC                   00000000 (0)\n+36D72 Compressed Size       00000000 (0)\n+36D76 Uncompressed Size     00000000 (0)\n+36D7A Filename Length       003F (63)\n+36D7C Extra Length          0009 (9)\n+36D7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36D7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+36DBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+36DBF   Length              0005 (5)\n+36DC1   Flags               01 (1) 'Modification'\n+36DC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+36DC6 PAYLOAD\n+\n+3742D DATA DESCRIPTOR       08074B50 (134695760)\n+37431 CRC                   1B483D0F (457719055)\n+37435 Compressed Size       00000667 (1639)\n+37439 Uncompressed Size     00000667 (1639)\n+\n+3743D LOCAL HEADER #83      04034B50 (67324752)\n+37441 Extract Zip Spec      14 (20) '2.0'\n+37442 Extract OS            00 (0) 'MS-DOS'\n+37443 General Purpose Flag  0000 (0)\n+37445 Compression Method    0000 (0) 'Stored'\n+37447 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3744B CRC                   00000000 (0)\n+3744F Compressed Size       00000000 (0)\n+37453 Uncompressed Size     00000000 (0)\n+37457 Filename Length       0025 (37)\n+37459 Extra Length          0009 (9)\n+3745B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3745B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+37480 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+37482   Length              0005 (5)\n+37484   Flags               01 (1) 'Modification'\n+37485   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+37489 LOCAL HEADER #84      04034B50 (67324752)\n+3748D Extract Zip Spec      14 (20) '2.0'\n+3748E Extract OS            00 (0) 'MS-DOS'\n+3748F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+37491 Compression Method    0000 (0) 'Stored'\n+37493 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+37497 CRC                   00000000 (0)\n+3749B Compressed Size       00000000 (0)\n+3749F Uncompressed Size     00000000 (0)\n+374A3 Filename Length       0048 (72)\n+374A5 Extra Length          0009 (9)\n+374A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x374A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+374EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+374F1   Length              0005 (5)\n+374F3   Flags               01 (1) 'Modification'\n+374F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+374F8 PAYLOAD\n+\n+38089 DATA DESCRIPTOR       08074B50 (134695760)\n+3808D CRC                   B81EA5D5 (3089016277)\n+38091 Compressed Size       00000B91 (2961)\n+38095 Uncompressed Size     00000B91 (2961)\n+\n+38099 LOCAL HEADER #85      04034B50 (67324752)\n+3809D Extract Zip Spec      14 (20) '2.0'\n+3809E Extract OS            00 (0) 'MS-DOS'\n+3809F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+380A1 Compression Method    0000 (0) 'Stored'\n+380A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+380A7 CRC                   00000000 (0)\n+380AB Compressed Size       00000000 (0)\n+380AF Uncompressed Size     00000000 (0)\n+380B3 Filename Length       0045 (69)\n+380B5 Extra Length          0009 (9)\n+380B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x380B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+380FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+380FE   Length              0005 (5)\n+38100   Flags               01 (1) 'Modification'\n+38101   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+38105 PAYLOAD\n+\n+38667 DATA DESCRIPTOR       08074B50 (134695760)\n+3866B CRC                   EF780E16 (4017622550)\n+3866F Compressed Size       00000562 (1378)\n+38673 Uncompressed Size     00000562 (1378)\n+\n+38677 LOCAL HEADER #86      04034B50 (67324752)\n+3867B Extract Zip Spec      14 (20) '2.0'\n+3867C Extract OS            00 (0) 'MS-DOS'\n+3867D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3867F Compression Method    0000 (0) 'Stored'\n+38681 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+38685 CRC                   00000000 (0)\n+38689 Compressed Size       00000000 (0)\n+3868D Uncompressed Size     00000000 (0)\n+38691 Filename Length       0047 (71)\n+38693 Extra Length          0009 (9)\n+38695 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38695: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+386DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+386DE   Length              0005 (5)\n+386E0   Flags               01 (1) 'Modification'\n+386E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+386E5 PAYLOAD\n+\n+38F88 DATA DESCRIPTOR       08074B50 (134695760)\n+38F8C CRC                   CC678E8E (3429338766)\n+38F90 Compressed Size       000008A3 (2211)\n+38F94 Uncompressed Size     000008A3 (2211)\n+\n+38F98 LOCAL HEADER #87      04034B50 (67324752)\n+38F9C Extract Zip Spec      14 (20) '2.0'\n+38F9D Extract OS            00 (0) 'MS-DOS'\n+38F9E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+38FA0 Compression Method    0000 (0) 'Stored'\n+38FA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+38FA6 CRC                   00000000 (0)\n+38FAA Compressed Size       00000000 (0)\n+38FAE Uncompressed Size     00000000 (0)\n+38FB2 Filename Length       004A (74)\n+38FB4 Extra Length          0009 (9)\n+38FB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38FB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+39000 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+39002   Length              0005 (5)\n+39004   Flags               01 (1) 'Modification'\n+39005   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+39009 PAYLOAD\n+\n+3A252 DATA DESCRIPTOR       08074B50 (134695760)\n+3A256 CRC                   5E735CAA (1584618666)\n+3A25A Compressed Size       00001249 (4681)\n+3A25E Uncompressed Size     00001249 (4681)\n+\n+3A262 LOCAL HEADER #88      04034B50 (67324752)\n+3A266 Extract Zip Spec      14 (20) '2.0'\n+3A267 Extract OS            00 (0) 'MS-DOS'\n+3A268 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3A26A Compression Method    0000 (0) 'Stored'\n+3A26C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3A270 CRC                   00000000 (0)\n+3A274 Compressed Size       00000000 (0)\n+3A278 Uncompressed Size     00000000 (0)\n+3A27C Filename Length       0047 (71)\n+3A27E Extra Length          0009 (9)\n+3A280 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3A280: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3A2C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3A2C9   Length              0005 (5)\n+3A2CB   Flags               01 (1) 'Modification'\n+3A2CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3A2D0 PAYLOAD\n+\n+3A83A DATA DESCRIPTOR       08074B50 (134695760)\n+3A83E CRC                   F08C4805 (4035725317)\n+3A842 Compressed Size       0000056A (1386)\n+3A846 Uncompressed Size     0000056A (1386)\n+\n+3A84A LOCAL HEADER #89      04034B50 (67324752)\n+3A84E Extract Zip Spec      14 (20) '2.0'\n+3A84F Extract OS            00 (0) 'MS-DOS'\n+3A850 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3A852 Compression Method    0000 (0) 'Stored'\n+3A854 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3A858 CRC                   00000000 (0)\n+3A85C Compressed Size       00000000 (0)\n+3A860 Uncompressed Size     00000000 (0)\n+3A864 Filename Length       004B (75)\n+3A866 Extra Length          0009 (9)\n+3A868 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3A868: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3A8B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3A8B5   Length              0005 (5)\n+3A8B7   Flags               01 (1) 'Modification'\n+3A8B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3A8BC PAYLOAD\n+\n+3AFC0 DATA DESCRIPTOR       08074B50 (134695760)\n+3AFC4 CRC                   EACCF2B1 (3939300017)\n+3AFC8 Compressed Size       00000704 (1796)\n+3AFCC Uncompressed Size     00000704 (1796)\n+\n+3AFD0 LOCAL HEADER #90      04034B50 (67324752)\n+3AFD4 Extract Zip Spec      14 (20) '2.0'\n+3AFD5 Extract OS            00 (0) 'MS-DOS'\n+3AFD6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3AFD8 Compression Method    0000 (0) 'Stored'\n+3AFDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3AFDE CRC                   00000000 (0)\n+3AFE2 Compressed Size       00000000 (0)\n+3AFE6 Uncompressed Size     00000000 (0)\n+3AFEA Filename Length       0046 (70)\n+3AFEC Extra Length          0009 (9)\n+3AFEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AFEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3B034 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3B036   Length              0005 (5)\n+3B038   Flags               01 (1) 'Modification'\n+3B039   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3B03D PAYLOAD\n+\n+3B5A3 DATA DESCRIPTOR       08074B50 (134695760)\n+3B5A7 CRC                   69ADD8AE (1773000878)\n+3B5AB Compressed Size       00000566 (1382)\n+3B5AF Uncompressed Size     00000566 (1382)\n+\n+3B5B3 LOCAL HEADER #91      04034B50 (67324752)\n+3B5B7 Extract Zip Spec      14 (20) '2.0'\n+3B5B8 Extract OS            00 (0) 'MS-DOS'\n+3B5B9 General Purpose Flag  0000 (0)\n+3B5BB Compression Method    0000 (0) 'Stored'\n+3B5BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3B5C1 CRC                   00000000 (0)\n+3B5C5 Compressed Size       00000000 (0)\n+3B5C9 Uncompressed Size     00000000 (0)\n+3B5CD Filename Length       0029 (41)\n+3B5CF Extra Length          0009 (9)\n+3B5D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B5D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3B5FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3B5FC   Length              0005 (5)\n+3B5FE   Flags               01 (1) 'Modification'\n+3B5FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3B603 LOCAL HEADER #92      04034B50 (67324752)\n+3B607 Extract Zip Spec      14 (20) '2.0'\n+3B608 Extract OS            00 (0) 'MS-DOS'\n+3B609 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3B60B Compression Method    0000 (0) 'Stored'\n+3B60D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3B611 CRC                   00000000 (0)\n+3B615 Compressed Size       00000000 (0)\n+3B619 Uncompressed Size     00000000 (0)\n+3B61D Filename Length       0059 (89)\n+3B61F Extra Length          0009 (9)\n+3B621 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B621: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3B67A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3B67C   Length              0005 (5)\n+3B67E   Flags               01 (1) 'Modification'\n+3B67F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3B683 PAYLOAD\n+\n+3C1FA DATA DESCRIPTOR       08074B50 (134695760)\n+3C1FE CRC                   2470BA0F (611367439)\n+3C202 Compressed Size       00000B77 (2935)\n+3C206 Uncompressed Size     00000B77 (2935)\n+\n+3C20A LOCAL HEADER #93      04034B50 (67324752)\n+3C20E Extract Zip Spec      14 (20) '2.0'\n+3C20F Extract OS            00 (0) 'MS-DOS'\n+3C210 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3C212 Compression Method    0000 (0) 'Stored'\n+3C214 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3C218 CRC                   00000000 (0)\n+3C21C Compressed Size       00000000 (0)\n+3C220 Uncompressed Size     00000000 (0)\n+3C224 Filename Length       004D (77)\n+3C226 Extra Length          0009 (9)\n+3C228 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C228: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3C275 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3C277   Length              0005 (5)\n+3C279   Flags               01 (1) 'Modification'\n+3C27A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3C27E PAYLOAD\n+\n+3C9AE DATA DESCRIPTOR       08074B50 (134695760)\n+3C9B2 CRC                   F02EA49E (4029588638)\n+3C9B6 Compressed Size       00000730 (1840)\n+3C9BA Uncompressed Size     00000730 (1840)\n+\n+3C9BE LOCAL HEADER #94      04034B50 (67324752)\n+3C9C2 Extract Zip Spec      14 (20) '2.0'\n+3C9C3 Extract OS            00 (0) 'MS-DOS'\n+3C9C4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3C9C6 Compression Method    0000 (0) 'Stored'\n+3C9C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3C9CC CRC                   00000000 (0)\n+3C9D0 Compressed Size       00000000 (0)\n+3C9D4 Uncompressed Size     00000000 (0)\n+3C9D8 Filename Length       004C (76)\n+3C9DA Extra Length          0009 (9)\n+3C9DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C9DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3CA28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3CA2A   Length              0005 (5)\n+3CA2C   Flags               01 (1) 'Modification'\n+3CA2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3CA31 PAYLOAD\n+\n+3D15C DATA DESCRIPTOR       08074B50 (134695760)\n+3D160 CRC                   91BA4E47 (2444906055)\n+3D164 Compressed Size       0000072B (1835)\n+3D168 Uncompressed Size     0000072B (1835)\n+\n+3D16C LOCAL HEADER #95      04034B50 (67324752)\n+3D170 Extract Zip Spec      14 (20) '2.0'\n+3D171 Extract OS            00 (0) 'MS-DOS'\n+3D172 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3D174 Compression Method    0000 (0) 'Stored'\n+3D176 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3D17A CRC                   00000000 (0)\n+3D17E Compressed Size       00000000 (0)\n+3D182 Uncompressed Size     00000000 (0)\n+3D186 Filename Length       0052 (82)\n+3D188 Extra Length          0009 (9)\n+3D18A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D18A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3D1DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3D1DE   Length              0005 (5)\n+3D1E0   Flags               01 (1) 'Modification'\n+3D1E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3D1E5 PAYLOAD\n+\n+3EAE2 DATA DESCRIPTOR       08074B50 (134695760)\n+3EAE6 CRC                   594A4504 (1498039556)\n+3EAEA Compressed Size       000018FD (6397)\n+3EAEE Uncompressed Size     000018FD (6397)\n+\n+3EAF2 LOCAL HEADER #96      04034B50 (67324752)\n+3EAF6 Extract Zip Spec      14 (20) '2.0'\n+3EAF7 Extract OS            00 (0) 'MS-DOS'\n+3EAF8 General Purpose Flag  0000 (0)\n+3EAFA Compression Method    0000 (0) 'Stored'\n+3EAFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3EB00 CRC                   00000000 (0)\n+3EB04 Compressed Size       00000000 (0)\n+3EB08 Uncompressed Size     00000000 (0)\n+3EB0C Filename Length       0020 (32)\n+3EB0E Extra Length          0009 (9)\n+3EB10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3EB10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3EB30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3EB32   Length              0005 (5)\n+3EB34   Flags               01 (1) 'Modification'\n+3EB35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3EB39 LOCAL HEADER #97      04034B50 (67324752)\n+3EB3D Extract Zip Spec      14 (20) '2.0'\n+3EB3E Extract OS            00 (0) 'MS-DOS'\n+3EB3F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3EB41 Compression Method    0000 (0) 'Stored'\n+3EB43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3EB47 CRC                   00000000 (0)\n+3EB4B Compressed Size       00000000 (0)\n+3EB4F Uncompressed Size     00000000 (0)\n+3EB53 Filename Length       004C (76)\n+3EB55 Extra Length          0009 (9)\n+3EB57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3EB57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3EBA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3EBA5   Length              0005 (5)\n+3EBA7   Flags               01 (1) 'Modification'\n+3EBA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3EBAC PAYLOAD\n+\n+3FC7A DATA DESCRIPTOR       08074B50 (134695760)\n+3FC7E CRC                   FF3DB830 (4282234928)\n+3FC82 Compressed Size       000010CE (4302)\n+3FC86 Uncompressed Size     000010CE (4302)\n+\n+3FC8A CENTRAL HEADER #1     02014B50 (33639248)\n+3FC8E Created Zip Spec      14 (20) '2.0'\n+3FC8F Created OS            00 (0) 'MS-DOS'\n+3FC90 Extract Zip Spec      14 (20) '2.0'\n+3FC91 Extract OS            00 (0) 'MS-DOS'\n+3FC92 General Purpose Flag  0000 (0)\n+3FC94 Compression Method    0000 (0) 'Stored'\n+3FC96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FC9A CRC                   00000000 (0)\n+3FC9E Compressed Size       00000000 (0)\n+3FCA2 Uncompressed Size     00000000 (0)\n+3FCA6 Filename Length       0009 (9)\n+3FCA8 Extra Length          0009 (9)\n+3FCAA Comment Length        0000 (0)\n+3FCAC Disk Start            0000 (0)\n+3FCAE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FCB0 Ext File Attributes   00000000 (0)\n+3FCB4 Local Header Offset   00000000 (0)\n+3FCB8 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FCB8: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+3FCC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FCC3   Length              0005 (5)\n+3FCC5   Flags               01 (1) 'Modification'\n+3FCC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FCCA CENTRAL HEADER #2     02014B50 (33639248)\n+3FCCE Created Zip Spec      14 (20) '2.0'\n+3FCCF Created OS            00 (0) 'MS-DOS'\n+3FCD0 Extract Zip Spec      14 (20) '2.0'\n+3FCD1 Extract OS            00 (0) 'MS-DOS'\n+3FCD2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3FCD4 Compression Method    0000 (0) 'Stored'\n+3FCD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FCDA CRC                   F19B91F6 (4053504502)\n+3FCDE Compressed Size       00000CE0 (3296)\n+3FCE2 Uncompressed Size     00000CE0 (3296)\n+3FCE6 Filename Length       0015 (21)\n+3FCE8 Extra Length          0009 (9)\n+3FCEA Comment Length        0000 (0)\n+3FCEC Disk Start            0000 (0)\n+3FCEE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FCF0 Ext File Attributes   00000000 (0)\n+3FCF4 Local Header Offset   00000030 (48)\n+3FCF8 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FCF8: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FD0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FD0F   Length              0005 (5)\n+3FD11   Flags               01 (1) 'Modification'\n+3FD12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FD16 CENTRAL HEADER #3     02014B50 (33639248)\n+3FD1A Created Zip Spec      14 (20) '2.0'\n+3FD1B Created OS            00 (0) 'MS-DOS'\n+3FD1C Extract Zip Spec      14 (20) '2.0'\n+3FD1D Extract OS            00 (0) 'MS-DOS'\n+3FD1E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3FD20 Compression Method    0000 (0) 'Stored'\n+3FD22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FD26 CRC                   86E2B4B4 (2263004340)\n+3FD2A Compressed Size       00002C5E (11358)\n+3FD2E Uncompressed Size     00002C5E (11358)\n+3FD32 Filename Length       0010 (16)\n+3FD34 Extra Length          0009 (9)\n+3FD36 Comment Length        0000 (0)\n+3FD38 Disk Start            0000 (0)\n+3FD3A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FD3C Ext File Attributes   00000000 (0)\n+3FD40 Local Header Offset   00000D5C (3420)\n+3FD44 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FD44: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FD54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FD56   Length              0005 (5)\n+3FD58   Flags               01 (1) 'Modification'\n+3FD59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FD5D CENTRAL HEADER #4     02014B50 (33639248)\n+3FD61 Created Zip Spec      14 (20) '2.0'\n+3FD62 Created OS            00 (0) 'MS-DOS'\n+3FD63 Extract Zip Spec      14 (20) '2.0'\n+3FD64 Extract OS            00 (0) 'MS-DOS'\n+3FD65 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3FD67 Compression Method    0000 (0) 'Stored'\n+3FD69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FD6D CRC                   EE027FB2 (3993141170)\n+3FD71 Compressed Size       00000019 (25)\n+3FD75 Uncompressed Size     00000019 (25)\n+3FD79 Filename Length       0014 (20)\n+3FD7B Extra Length          0009 (9)\n+3FD7D Comment Length        0000 (0)\n+3FD7F Disk Start            0000 (0)\n+3FD81 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FD83 Ext File Attributes   00000000 (0)\n+3FD87 Local Header Offset   00003A01 (14849)\n+3FD8B Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FD8B: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FD9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FDA1   Length              0005 (5)\n+3FDA3   Flags               01 (1) 'Modification'\n+3FDA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FDA8 CENTRAL HEADER #5     02014B50 (33639248)\n+3FDAC Created Zip Spec      14 (20) '2.0'\n+3FDAD Created OS            00 (0) 'MS-DOS'\n+3FDAE Extract Zip Spec      14 (20) '2.0'\n+3FDAF Extract OS            00 (0) 'MS-DOS'\n+3FDB0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3FDB2 Compression Method    0000 (0) 'Stored'\n+3FDB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FDB8 CRC                   AFC7B46A (2949100650)\n+3FDBC Compressed Size       000000AF (175)\n+3FDC0 Uncompressed Size     000000AF (175)\n+3FDC4 Filename Length       000F (15)\n+3FDC6 Extra Length          0009 (9)\n+3FDC8 Comment Length        0000 (0)\n+3FDCA Disk Start            0000 (0)\n+3FDCC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FDCE Ext File Attributes   00000000 (0)\n+3FDD2 Local Header Offset   00003A65 (14949)\n+3FDD6 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FDD6: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FDE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FDE7   Length              0005 (5)\n+3FDE9   Flags               01 (1) 'Modification'\n+3FDEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FDEE CENTRAL HEADER #6     02014B50 (33639248)\n+3FDF2 Created Zip Spec      14 (20) '2.0'\n+3FDF3 Created OS            00 (0) 'MS-DOS'\n+3FDF4 Extract Zip Spec      14 (20) '2.0'\n+3FDF5 Extract OS            00 (0) 'MS-DOS'\n+3FDF6 General Purpose Flag  0000 (0)\n+3FDF8 Compression Method    0000 (0) 'Stored'\n+3FDFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FDFE CRC                   00000000 (0)\n+3FE02 Compressed Size       00000000 (0)\n+3FE06 Uncompressed Size     00000000 (0)\n+3FE0A Filename Length       000F (15)\n+3FE0C Extra Length          0009 (9)\n+3FE0E Comment Length        0000 (0)\n+3FE10 Disk Start            0000 (0)\n+3FE12 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FE14 Ext File Attributes   00000000 (0)\n+3FE18 Local Header Offset   00003B5A (15194)\n+3FE1C Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FE1C: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FE2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FE2D   Length              0005 (5)\n+3FE2F   Flags               01 (1) 'Modification'\n+3FE30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FE34 CENTRAL HEADER #7     02014B50 (33639248)\n+3FE38 Created Zip Spec      14 (20) '2.0'\n+3FE39 Created OS            00 (0) 'MS-DOS'\n+3FE3A Extract Zip Spec      14 (20) '2.0'\n+3FE3B Extract OS            00 (0) 'MS-DOS'\n+3FE3C General Purpose Flag  0000 (0)\n+3FE3E Compression Method    0000 (0) 'Stored'\n+3FE40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FE44 CRC                   00000000 (0)\n+3FE48 Compressed Size       00000000 (0)\n+3FE4C Uncompressed Size     00000000 (0)\n+3FE50 Filename Length       0018 (24)\n+3FE52 Extra Length          0009 (9)\n+3FE54 Comment Length        0000 (0)\n+3FE56 Disk Start            0000 (0)\n+3FE58 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FE5A Ext File Attributes   00000000 (0)\n+3FE5E Local Header Offset   00003B90 (15248)\n+3FE62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FE62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FE7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FE7C   Length              0005 (5)\n+3FE7E   Flags               01 (1) 'Modification'\n+3FE7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FE83 CENTRAL HEADER #8     02014B50 (33639248)\n+3FE87 Created Zip Spec      14 (20) '2.0'\n+3FE88 Created OS            00 (0) 'MS-DOS'\n+3FE89 Extract Zip Spec      14 (20) '2.0'\n+3FE8A Extract OS            00 (0) 'MS-DOS'\n+3FE8B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3FE8D Compression Method    0000 (0) 'Stored'\n+3FE8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FE93 CRC                   ACE74F1F (2900840223)\n+3FE97 Compressed Size       0000003D (61)\n+3FE9B Uncompressed Size     0000003D (61)\n+3FE9F Filename Length       0046 (70)\n+3FEA1 Extra Length          0009 (9)\n+3FEA3 Comment Length        0000 (0)\n+3FEA5 Disk Start            0000 (0)\n+3FEA7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FEA9 Ext File Attributes   00000000 (0)\n+3FEAD Local Header Offset   00003BCF (15311)\n+3FEB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FEB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FEF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FEF9   Length              0005 (5)\n+3FEFB   Flags               01 (1) 'Modification'\n+3FEFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FF00 CENTRAL HEADER #9     02014B50 (33639248)\n+3FF04 Created Zip Spec      14 (20) '2.0'\n+3FF05 Created OS            00 (0) 'MS-DOS'\n+3FF06 Extract Zip Spec      14 (20) '2.0'\n+3FF07 Extract OS            00 (0) 'MS-DOS'\n+3FF08 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3FF0A Compression Method    0000 (0) 'Stored'\n+3FF0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FF10 CRC                   F8A431C6 (4171510214)\n+3FF14 Compressed Size       00000047 (71)\n+3FF18 Uncompressed Size     00000047 (71)\n+3FF1C Filename Length       0044 (68)\n+3FF1E Extra Length          0009 (9)\n+3FF20 Comment Length        0000 (0)\n+3FF22 Disk Start            0000 (0)\n+3FF24 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FF26 Ext File Attributes   00000000 (0)\n+3FF2A Local Header Offset   00003C89 (15497)\n+3FF2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FF2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FF72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FF74   Length              0005 (5)\n+3FF76   Flags               01 (1) 'Modification'\n+3FF77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3FF7B CENTRAL HEADER #10    02014B50 (33639248)\n+3FF7F Created Zip Spec      14 (20) '2.0'\n+3FF80 Created OS            00 (0) 'MS-DOS'\n+3FF81 Extract Zip Spec      14 (20) '2.0'\n+3FF82 Extract OS            00 (0) 'MS-DOS'\n+3FF83 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3FF85 Compression Method    0000 (0) 'Stored'\n+3FF87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3FF8B CRC                   3DF8163B (1039668795)\n+3FF8F Compressed Size       00000116 (278)\n+3FF93 Uncompressed Size     00000116 (278)\n+3FF97 Filename Length       0050 (80)\n+3FF99 Extra Length          0009 (9)\n+3FF9B Comment Length        0000 (0)\n+3FF9D Disk Start            0000 (0)\n+3FF9F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+3FFA1 Ext File Attributes   00000000 (0)\n+3FFA5 Local Header Offset   00003D4B (15691)\n+3FFA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FFA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3FFF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3FFFB   Length              0005 (5)\n+3FFFD   Flags               01 (1) 'Modification'\n+3FFFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40002 CENTRAL HEADER #11    02014B50 (33639248)\n+40006 Created Zip Spec      14 (20) '2.0'\n+40007 Created OS            00 (0) 'MS-DOS'\n+40008 Extract Zip Spec      14 (20) '2.0'\n+40009 Extract OS            00 (0) 'MS-DOS'\n+4000A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4000C Compression Method    0000 (0) 'Stored'\n+4000E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40012 CRC                   7138BB7F (1899543423)\n+40016 Compressed Size       000002D4 (724)\n+4001A Uncompressed Size     000002D4 (724)\n+4001E Filename Length       0058 (88)\n+40020 Extra Length          0009 (9)\n+40022 Comment Length        0000 (0)\n+40024 Disk Start            0000 (0)\n+40026 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40028 Ext File Attributes   00000000 (0)\n+4002C Local Header Offset   00003EE8 (16104)\n+40030 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40030: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40088 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4008A   Length              0005 (5)\n+4008C   Flags               01 (1) 'Modification'\n+4008D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40091 CENTRAL HEADER #12    02014B50 (33639248)\n+40095 Created Zip Spec      14 (20) '2.0'\n+40096 Created OS            00 (0) 'MS-DOS'\n+40097 Extract Zip Spec      14 (20) '2.0'\n+40098 Extract OS            00 (0) 'MS-DOS'\n+40099 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4009B Compression Method    0000 (0) 'Stored'\n+4009D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+400A1 CRC                   0D088F60 (218664800)\n+400A5 Compressed Size       000000B8 (184)\n+400A9 Uncompressed Size     000000B8 (184)\n+400AD Filename Length       0052 (82)\n+400AF Extra Length          0009 (9)\n+400B1 Comment Length        0000 (0)\n+400B3 Disk Start            0000 (0)\n+400B5 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+400B7 Ext File Attributes   00000000 (0)\n+400BB Local Header Offset   0000424B (16971)\n+400BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x400BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40111 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40113   Length              0005 (5)\n+40115   Flags               01 (1) 'Modification'\n+40116   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4011A CENTRAL HEADER #13    02014B50 (33639248)\n+4011E Created Zip Spec      14 (20) '2.0'\n+4011F Created OS            00 (0) 'MS-DOS'\n+40120 Extract Zip Spec      14 (20) '2.0'\n+40121 Extract OS            00 (0) 'MS-DOS'\n+40122 General Purpose Flag  0000 (0)\n+40124 Compression Method    0000 (0) 'Stored'\n+40126 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4012A CRC                   00000000 (0)\n+4012E Compressed Size       00000000 (0)\n+40132 Uncompressed Size     00000000 (0)\n+40136 Filename Length       000F (15)\n+40138 Extra Length          0009 (9)\n+4013A Comment Length        0000 (0)\n+4013C Disk Start            0000 (0)\n+4013E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40140 Ext File Attributes   00000000 (0)\n+40144 Local Header Offset   0000438C (17292)\n+40148 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40148: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40157 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40159   Length              0005 (5)\n+4015B   Flags               01 (1) 'Modification'\n+4015C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40160 CENTRAL HEADER #14    02014B50 (33639248)\n+40164 Created Zip Spec      14 (20) '2.0'\n+40165 Created OS            00 (0) 'MS-DOS'\n+40166 Extract Zip Spec      14 (20) '2.0'\n+40167 Extract OS            00 (0) 'MS-DOS'\n+40168 General Purpose Flag  0000 (0)\n+4016A Compression Method    0000 (0) 'Stored'\n+4016C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40170 CRC                   00000000 (0)\n+40174 Compressed Size       00000000 (0)\n+40178 Uncompressed Size     00000000 (0)\n+4017C Filename Length       0020 (32)\n+4017E Extra Length          0009 (9)\n+40180 Comment Length        0000 (0)\n+40182 Disk Start            0000 (0)\n+40184 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40186 Ext File Attributes   00000000 (0)\n+4018A Local Header Offset   000043C2 (17346)\n+4018E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4018E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+401AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+401B0   Length              0005 (5)\n+401B2   Flags               01 (1) 'Modification'\n+401B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+401B7 CENTRAL HEADER #15    02014B50 (33639248)\n+401BB Created Zip Spec      14 (20) '2.0'\n+401BC Created OS            00 (0) 'MS-DOS'\n+401BD Extract Zip Spec      14 (20) '2.0'\n+401BE Extract OS            00 (0) 'MS-DOS'\n+401BF General Purpose Flag  0000 (0)\n+401C1 Compression Method    0000 (0) 'Stored'\n+401C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+401C7 CRC                   00000000 (0)\n+401CB Compressed Size       00000000 (0)\n+401CF Uncompressed Size     00000000 (0)\n+401D3 Filename Length       0033 (51)\n+401D5 Extra Length          0009 (9)\n+401D7 Comment Length        0000 (0)\n+401D9 Disk Start            0000 (0)\n+401DB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+401DD Ext File Attributes   00000000 (0)\n+401E1 Local Header Offset   00004409 (17417)\n+401E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x401E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40218 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4021A   Length              0005 (5)\n+4021C   Flags               01 (1) 'Modification'\n+4021D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40221 CENTRAL HEADER #16    02014B50 (33639248)\n+40225 Created Zip Spec      14 (20) '2.0'\n+40226 Created OS            00 (0) 'MS-DOS'\n+40227 Extract Zip Spec      14 (20) '2.0'\n+40228 Extract OS            00 (0) 'MS-DOS'\n+40229 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4022B Compression Method    0000 (0) 'Stored'\n+4022D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40231 CRC                   00000000 (0)\n+40235 Compressed Size       00000000 (0)\n+40239 Uncompressed Size     00000000 (0)\n+4023D Filename Length       0041 (65)\n+4023F Extra Length          0009 (9)\n+40241 Comment Length        0000 (0)\n+40243 Disk Start            0000 (0)\n+40245 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40247 Ext File Attributes   00000000 (0)\n+4024B Local Header Offset   00004463 (17507)\n+4024F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4024F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40290 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40292   Length              0005 (5)\n+40294   Flags               01 (1) 'Modification'\n+40295   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40299 CENTRAL HEADER #17    02014B50 (33639248)\n+4029D Created Zip Spec      14 (20) '2.0'\n+4029E Created OS            00 (0) 'MS-DOS'\n+4029F Extract Zip Spec      14 (20) '2.0'\n+402A0 Extract OS            00 (0) 'MS-DOS'\n+402A1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+402A3 Compression Method    0000 (0) 'Stored'\n+402A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+402A9 CRC                   4FF02D0F (1341140239)\n+402AD Compressed Size       00000BA1 (2977)\n+402B1 Uncompressed Size     00000BA1 (2977)\n+402B5 Filename Length       003A (58)\n+402B7 Extra Length          0009 (9)\n+402B9 Comment Length        0000 (0)\n+402BB Disk Start            0000 (0)\n+402BD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+402BF Ext File Attributes   00000000 (0)\n+402C3 Local Header Offset   000044DB (17627)\n+402C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x402C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40301 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40303   Length              0005 (5)\n+40305   Flags               01 (1) 'Modification'\n+40306   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4030A CENTRAL HEADER #18    02014B50 (33639248)\n+4030E Created Zip Spec      14 (20) '2.0'\n+4030F Created OS            00 (0) 'MS-DOS'\n+40310 Extract Zip Spec      14 (20) '2.0'\n+40311 Extract OS            00 (0) 'MS-DOS'\n+40312 General Purpose Flag  0000 (0)\n+40314 Compression Method    0000 (0) 'Stored'\n+40316 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4031A CRC                   00000000 (0)\n+4031E Compressed Size       00000000 (0)\n+40322 Uncompressed Size     00000000 (0)\n+40326 Filename Length       0004 (4)\n+40328 Extra Length          0009 (9)\n+4032A Comment Length        0000 (0)\n+4032C Disk Start            0000 (0)\n+4032E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40330 Ext File Attributes   00000000 (0)\n+40334 Local Header Offset   000050ED (20717)\n+40338 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x40338: Filename 'XXXX'\n+#          Zero length filename\n+#\n+4033C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4033E   Length              0005 (5)\n+40340   Flags               01 (1) 'Modification'\n+40341   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40345 CENTRAL HEADER #19    02014B50 (33639248)\n+40349 Created Zip Spec      14 (20) '2.0'\n+4034A Created OS            00 (0) 'MS-DOS'\n+4034B Extract Zip Spec      14 (20) '2.0'\n+4034C Extract OS            00 (0) 'MS-DOS'\n+4034D General Purpose Flag  0000 (0)\n+4034F Compression Method    0000 (0) 'Stored'\n+40351 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40355 CRC                   00000000 (0)\n+40359 Compressed Size       00000000 (0)\n+4035D Uncompressed Size     00000000 (0)\n+40361 Filename Length       000B (11)\n+40363 Extra Length          0009 (9)\n+40365 Comment Length        0000 (0)\n+40367 Disk Start            0000 (0)\n+40369 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4036B Ext File Attributes   00000000 (0)\n+4036F Local Header Offset   00005118 (20760)\n+40373 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40373: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4037E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40380   Length              0005 (5)\n+40382   Flags               01 (1) 'Modification'\n+40383   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40387 CENTRAL HEADER #20    02014B50 (33639248)\n+4038B Created Zip Spec      14 (20) '2.0'\n+4038C Created OS            00 (0) 'MS-DOS'\n+4038D Extract Zip Spec      14 (20) '2.0'\n+4038E Extract OS            00 (0) 'MS-DOS'\n+4038F General Purpose Flag  0000 (0)\n+40391 Compression Method    0000 (0) 'Stored'\n+40393 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40397 CRC                   00000000 (0)\n+4039B Compressed Size       00000000 (0)\n+4039F Uncompressed Size     00000000 (0)\n+403A3 Filename Length       0011 (17)\n+403A5 Extra Length          0009 (9)\n+403A7 Comment Length        0000 (0)\n+403A9 Disk Start            0000 (0)\n+403AB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+403AD Ext File Attributes   00000000 (0)\n+403B1 Local Header Offset   0000514A (20810)\n+403B5 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x403B5: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+403C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+403C8   Length              0005 (5)\n+403CA   Flags               01 (1) 'Modification'\n+403CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+403CF CENTRAL HEADER #21    02014B50 (33639248)\n+403D3 Created Zip Spec      14 (20) '2.0'\n+403D4 Created OS            00 (0) 'MS-DOS'\n+403D5 Extract Zip Spec      14 (20) '2.0'\n+403D6 Extract OS            00 (0) 'MS-DOS'\n+403D7 General Purpose Flag  0000 (0)\n+403D9 Compression Method    0000 (0) 'Stored'\n+403DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+403DF CRC                   00000000 (0)\n+403E3 Compressed Size       00000000 (0)\n+403E7 Uncompressed Size     00000000 (0)\n+403EB Filename Length       001A (26)\n+403ED Extra Length          0009 (9)\n+403EF Comment Length        0000 (0)\n+403F1 Disk Start            0000 (0)\n+403F3 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+403F5 Ext File Attributes   00000000 (0)\n+403F9 Local Header Offset   00005182 (20866)\n+403FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x403FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40417 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40419   Length              0005 (5)\n+4041B   Flags               01 (1) 'Modification'\n+4041C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40420 CENTRAL HEADER #22    02014B50 (33639248)\n+40424 Created Zip Spec      14 (20) '2.0'\n+40425 Created OS            00 (0) 'MS-DOS'\n+40426 Extract Zip Spec      14 (20) '2.0'\n+40427 Extract OS            00 (0) 'MS-DOS'\n+40428 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4042A Compression Method    0000 (0) 'Stored'\n+4042C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40430 CRC                   42A6419F (1118192031)\n+40434 Compressed Size       00000A8E (2702)\n+40438 Uncompressed Size     00000A8E (2702)\n+4043C Filename Length       003A (58)\n+4043E Extra Length          0009 (9)\n+40440 Comment Length        0000 (0)\n+40442 Disk Start            0000 (0)\n+40444 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40446 Ext File Attributes   00000000 (0)\n+4044A Local Header Offset   000051C3 (20931)\n+4044E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4044E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40488 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4048A   Length              0005 (5)\n+4048C   Flags               01 (1) 'Modification'\n+4048D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40491 CENTRAL HEADER #23    02014B50 (33639248)\n+40495 Created Zip Spec      14 (20) '2.0'\n+40496 Created OS            00 (0) 'MS-DOS'\n+40497 Extract Zip Spec      14 (20) '2.0'\n+40498 Extract OS            00 (0) 'MS-DOS'\n+40499 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4049B Compression Method    0000 (0) 'Stored'\n+4049D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+404A1 CRC                   3EF8A330 (1056482096)\n+404A5 Compressed Size       00001076 (4214)\n+404A9 Uncompressed Size     00001076 (4214)\n+404AD Filename Length       0045 (69)\n+404AF Extra Length          0009 (9)\n+404B1 Comment Length        0000 (0)\n+404B3 Disk Start            0000 (0)\n+404B5 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+404B7 Ext File Attributes   00000000 (0)\n+404BB Local Header Offset   00005CC2 (23746)\n+404BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x404BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40504 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40506   Length              0005 (5)\n+40508   Flags               01 (1) 'Modification'\n+40509   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4050D CENTRAL HEADER #24    02014B50 (33639248)\n+40511 Created Zip Spec      14 (20) '2.0'\n+40512 Created OS            00 (0) 'MS-DOS'\n+40513 Extract Zip Spec      14 (20) '2.0'\n+40514 Extract OS            00 (0) 'MS-DOS'\n+40515 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40517 Compression Method    0000 (0) 'Stored'\n+40519 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4051D CRC                   EEF0F134 (4008767796)\n+40521 Compressed Size       0000051B (1307)\n+40525 Uncompressed Size     0000051B (1307)\n+40529 Filename Length       0032 (50)\n+4052B Extra Length          0009 (9)\n+4052D Comment Length        0000 (0)\n+4052F Disk Start            0000 (0)\n+40531 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40533 Ext File Attributes   00000000 (0)\n+40537 Local Header Offset   00006DB4 (28084)\n+4053B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4053B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4056D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4056F   Length              0005 (5)\n+40571   Flags               01 (1) 'Modification'\n+40572   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40576 CENTRAL HEADER #25    02014B50 (33639248)\n+4057A Created Zip Spec      14 (20) '2.0'\n+4057B Created OS            00 (0) 'MS-DOS'\n+4057C Extract Zip Spec      14 (20) '2.0'\n+4057D Extract OS            00 (0) 'MS-DOS'\n+4057E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40580 Compression Method    0000 (0) 'Stored'\n+40582 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40586 CRC                   1D5DF166 (492695910)\n+4058A Compressed Size       000003AD (941)\n+4058E Uncompressed Size     000003AD (941)\n+40592 Filename Length       002E (46)\n+40594 Extra Length          0009 (9)\n+40596 Comment Length        0000 (0)\n+40598 Disk Start            0000 (0)\n+4059A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4059C Ext File Attributes   00000000 (0)\n+405A0 Local Header Offset   00007338 (29496)\n+405A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x405A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+405D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+405D4   Length              0005 (5)\n+405D6   Flags               01 (1) 'Modification'\n+405D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+405DB CENTRAL HEADER #26    02014B50 (33639248)\n+405DF Created Zip Spec      14 (20) '2.0'\n+405E0 Created OS            00 (0) 'MS-DOS'\n+405E1 Extract Zip Spec      14 (20) '2.0'\n+405E2 Extract OS            00 (0) 'MS-DOS'\n+405E3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+405E5 Compression Method    0000 (0) 'Stored'\n+405E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+405EB CRC                   FAB44FD1 (4206120913)\n+405EF Compressed Size       000004FF (1279)\n+405F3 Uncompressed Size     000004FF (1279)\n+405F7 Filename Length       0035 (53)\n+405F9 Extra Length          0009 (9)\n+405FB Comment Length        0000 (0)\n+405FD Disk Start            0000 (0)\n+405FF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40601 Ext File Attributes   00000000 (0)\n+40605 Local Header Offset   0000774A (30538)\n+40609 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40609: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4063E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40640   Length              0005 (5)\n+40642   Flags               01 (1) 'Modification'\n+40643   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40647 CENTRAL HEADER #27    02014B50 (33639248)\n+4064B Created Zip Spec      14 (20) '2.0'\n+4064C Created OS            00 (0) 'MS-DOS'\n+4064D Extract Zip Spec      14 (20) '2.0'\n+4064E Extract OS            00 (0) 'MS-DOS'\n+4064F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40651 Compression Method    0000 (0) 'Stored'\n+40653 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40657 CRC                   0D3C7289 (222065289)\n+4065B Compressed Size       0000064D (1613)\n+4065F Uncompressed Size     0000064D (1613)\n+40663 Filename Length       0030 (48)\n+40665 Extra Length          0009 (9)\n+40667 Comment Length        0000 (0)\n+40669 Disk Start            0000 (0)\n+4066B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4066D Ext File Attributes   00000000 (0)\n+40671 Local Header Offset   00007CB5 (31925)\n+40675 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40675: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+406A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+406A7   Length              0005 (5)\n+406A9   Flags               01 (1) 'Modification'\n+406AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+406AE CENTRAL HEADER #28    02014B50 (33639248)\n+406B2 Created Zip Spec      14 (20) '2.0'\n+406B3 Created OS            00 (0) 'MS-DOS'\n+406B4 Extract Zip Spec      14 (20) '2.0'\n+406B5 Extract OS            00 (0) 'MS-DOS'\n+406B6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+406B8 Compression Method    0000 (0) 'Stored'\n+406BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+406BE CRC                   9A0F8216 (2584707606)\n+406C2 Compressed Size       00003C3D (15421)\n+406C6 Uncompressed Size     00003C3D (15421)\n+406CA Filename Length       002B (43)\n+406CC Extra Length          0009 (9)\n+406CE Comment Length        0000 (0)\n+406D0 Disk Start            0000 (0)\n+406D2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+406D4 Ext File Attributes   00000000 (0)\n+406D8 Local Header Offset   00008369 (33641)\n+406DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x406DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40707 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40709   Length              0005 (5)\n+4070B   Flags               01 (1) 'Modification'\n+4070C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40710 CENTRAL HEADER #29    02014B50 (33639248)\n+40714 Created Zip Spec      14 (20) '2.0'\n+40715 Created OS            00 (0) 'MS-DOS'\n+40716 Extract Zip Spec      14 (20) '2.0'\n+40717 Extract OS            00 (0) 'MS-DOS'\n+40718 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4071A Compression Method    0000 (0) 'Stored'\n+4071C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40720 CRC                   5D4E898D (1565428109)\n+40724 Compressed Size       000004E2 (1250)\n+40728 Uncompressed Size     000004E2 (1250)\n+4072C Filename Length       0033 (51)\n+4072E Extra Length          0009 (9)\n+40730 Comment Length        0000 (0)\n+40732 Disk Start            0000 (0)\n+40734 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40736 Ext File Attributes   00000000 (0)\n+4073A Local Header Offset   0000C008 (49160)\n+4073E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4073E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40771 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40773   Length              0005 (5)\n+40775   Flags               01 (1) 'Modification'\n+40776   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4077A CENTRAL HEADER #30    02014B50 (33639248)\n+4077E Created Zip Spec      14 (20) '2.0'\n+4077F Created OS            00 (0) 'MS-DOS'\n+40780 Extract Zip Spec      14 (20) '2.0'\n+40781 Extract OS            00 (0) 'MS-DOS'\n+40782 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40784 Compression Method    0000 (0) 'Stored'\n+40786 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4078A CRC                   2CED0C75 (753732725)\n+4078E Compressed Size       00002B2A (11050)\n+40792 Uncompressed Size     00002B2A (11050)\n+40796 Filename Length       002E (46)\n+40798 Extra Length          0009 (9)\n+4079A Comment Length        0000 (0)\n+4079C Disk Start            0000 (0)\n+4079E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+407A0 Ext File Attributes   00000000 (0)\n+407A4 Local Header Offset   0000C554 (50516)\n+407A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x407A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+407D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+407D8   Length              0005 (5)\n+407DA   Flags               01 (1) 'Modification'\n+407DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+407DF CENTRAL HEADER #31    02014B50 (33639248)\n+407E3 Created Zip Spec      14 (20) '2.0'\n+407E4 Created OS            00 (0) 'MS-DOS'\n+407E5 Extract Zip Spec      14 (20) '2.0'\n+407E6 Extract OS            00 (0) 'MS-DOS'\n+407E7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+407E9 Compression Method    0000 (0) 'Stored'\n+407EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+407EF CRC                   C38A081C (3280603164)\n+407F3 Compressed Size       00000C70 (3184)\n+407F7 Uncompressed Size     00000C70 (3184)\n+407FB Filename Length       0036 (54)\n+407FD Extra Length          0009 (9)\n+407FF Comment Length        0000 (0)\n+40801 Disk Start            0000 (0)\n+40803 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40805 Ext File Attributes   00000000 (0)\n+40809 Local Header Offset   0000F0E3 (61667)\n+4080D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4080D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40843 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40845   Length              0005 (5)\n+40847   Flags               01 (1) 'Modification'\n+40848   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4084C CENTRAL HEADER #32    02014B50 (33639248)\n+40850 Created Zip Spec      14 (20) '2.0'\n+40851 Created OS            00 (0) 'MS-DOS'\n+40852 Extract Zip Spec      14 (20) '2.0'\n+40853 Extract OS            00 (0) 'MS-DOS'\n+40854 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40856 Compression Method    0000 (0) 'Stored'\n+40858 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4085C CRC                   5D7F96AB (1568642731)\n+40860 Compressed Size       00000904 (2308)\n+40864 Uncompressed Size     00000904 (2308)\n+40868 Filename Length       0032 (50)\n+4086A Extra Length          0009 (9)\n+4086C Comment Length        0000 (0)\n+4086E Disk Start            0000 (0)\n+40870 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40872 Ext File Attributes   00000000 (0)\n+40876 Local Header Offset   0000FDC0 (64960)\n+4087A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4087A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+408AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+408AE   Length              0005 (5)\n+408B0   Flags               01 (1) 'Modification'\n+408B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+408B5 CENTRAL HEADER #33    02014B50 (33639248)\n+408B9 Created Zip Spec      14 (20) '2.0'\n+408BA Created OS            00 (0) 'MS-DOS'\n+408BB Extract Zip Spec      14 (20) '2.0'\n+408BC Extract OS            00 (0) 'MS-DOS'\n+408BD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+408BF Compression Method    0000 (0) 'Stored'\n+408C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+408C5 CRC                   509BAB75 (1352379253)\n+408C9 Compressed Size       0000083C (2108)\n+408CD Uncompressed Size     0000083C (2108)\n+408D1 Filename Length       002F (47)\n+408D3 Extra Length          0009 (9)\n+408D5 Comment Length        0000 (0)\n+408D7 Disk Start            0000 (0)\n+408D9 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+408DB Ext File Attributes   00000000 (0)\n+408DF Local Header Offset   0001072D (67373)\n+408E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x408E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40912 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40914   Length              0005 (5)\n+40916   Flags               01 (1) 'Modification'\n+40917   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4091B CENTRAL HEADER #34    02014B50 (33639248)\n+4091F Created Zip Spec      14 (20) '2.0'\n+40920 Created OS            00 (0) 'MS-DOS'\n+40921 Extract Zip Spec      14 (20) '2.0'\n+40922 Extract OS            00 (0) 'MS-DOS'\n+40923 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40925 Compression Method    0000 (0) 'Stored'\n+40927 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4092B CRC                   C02150D4 (3223408852)\n+4092F Compressed Size       00000BA1 (2977)\n+40933 Uncompressed Size     00000BA1 (2977)\n+40937 Filename Length       0031 (49)\n+40939 Extra Length          0009 (9)\n+4093B Comment Length        0000 (0)\n+4093D Disk Start            0000 (0)\n+4093F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40941 Ext File Attributes   00000000 (0)\n+40945 Local Header Offset   00010FCF (69583)\n+40949 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x40933: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x40949: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 4097A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 4097C   Length              0005 (5)\n 4097E   Flags               01 (1) 'Modification'\n 4097F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-40983 CENTRAL HEADER #87    02014B50 (33639248)\n+40983 CENTRAL HEADER #35    02014B50 (33639248)\n 40987 Created Zip Spec      14 (20) '2.0'\n 40988 Created OS            00 (0) 'MS-DOS'\n 40989 Extract Zip Spec      14 (20) '2.0'\n 4098A Extract OS            00 (0) 'MS-DOS'\n 4098B General Purpose Flag  0008 (8)\n       [Bit  3]              1 'Streamed'\n 4098D Compression Method    0000 (0) 'Stored'\n 4098F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40993 CRC                   6100366B (1627403883)\n-40997 Compressed Size       000011E6 (4582)\n-4099B Uncompressed Size     000011E6 (4582)\n-4099F Filename Length       004A (74)\n+40993 CRC                   B34C7492 (3008132242)\n+40997 Compressed Size       00000AAE (2734)\n+4099B Uncompressed Size     00000AAE (2734)\n+4099F Filename Length       0036 (54)\n 409A1 Extra Length          0009 (9)\n 409A3 Comment Length        0000 (0)\n 409A5 Disk Start            0000 (0)\n 409A7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n 409A9 Ext File Attributes   00000000 (0)\n-409AD Local Header Offset   00037A64 (227940)\n-409B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+409AD Local Header Offset   00011BD8 (72664)\n+409B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x409B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x409B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-409FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-409FD   Length              0005 (5)\n-409FF   Flags               01 (1) 'Modification'\n-40A00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40A04 CENTRAL HEADER #88    02014B50 (33639248)\n-40A08 Created Zip Spec      14 (20) '2.0'\n-40A09 Created OS            00 (0) 'MS-DOS'\n-40A0A Extract Zip Spec      14 (20) '2.0'\n-40A0B Extract OS            00 (0) 'MS-DOS'\n-40A0C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40A0E Compression Method    0000 (0) 'Stored'\n-40A10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40A14 CRC                   8939A522 (2302256418)\n-40A18 Compressed Size       00000548 (1352)\n-40A1C Uncompressed Size     00000548 (1352)\n-40A20 Filename Length       0047 (71)\n-40A22 Extra Length          0009 (9)\n-40A24 Comment Length        0000 (0)\n-40A26 Disk Start            0000 (0)\n-40A28 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40A2A Ext File Attributes   00000000 (0)\n-40A2E Local Header Offset   00038CCB (232651)\n-40A32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40A32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40A79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40A7B   Length              0005 (5)\n-40A7D   Flags               01 (1) 'Modification'\n-40A7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40A82 CENTRAL HEADER #89    02014B50 (33639248)\n-40A86 Created Zip Spec      14 (20) '2.0'\n-40A87 Created OS            00 (0) 'MS-DOS'\n-40A88 Extract Zip Spec      14 (20) '2.0'\n-40A89 Extract OS            00 (0) 'MS-DOS'\n-40A8A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40A8C Compression Method    0000 (0) 'Stored'\n-40A8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40A92 CRC                   2244431E (574898974)\n-40A96 Compressed Size       000006DE (1758)\n-40A9A Uncompressed Size     000006DE (1758)\n-40A9E Filename Length       004B (75)\n-40AA0 Extra Length          0009 (9)\n-40AA2 Comment Length        0000 (0)\n-40AA4 Disk Start            0000 (0)\n-40AA6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40AA8 Ext File Attributes   00000000 (0)\n-40AAC Local Header Offset   00039291 (234129)\n-40AB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40AB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40AFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40AFD   Length              0005 (5)\n-40AFF   Flags               01 (1) 'Modification'\n-40B00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40B04 CENTRAL HEADER #90    02014B50 (33639248)\n-40B08 Created Zip Spec      14 (20) '2.0'\n-40B09 Created OS            00 (0) 'MS-DOS'\n-40B0A Extract Zip Spec      14 (20) '2.0'\n-40B0B Extract OS            00 (0) 'MS-DOS'\n-40B0C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40B0E Compression Method    0000 (0) 'Stored'\n-40B10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40B14 CRC                   6B0A1F36 (1795825462)\n-40B18 Compressed Size       00000544 (1348)\n-40B1C Uncompressed Size     00000544 (1348)\n-40B20 Filename Length       0046 (70)\n-40B22 Extra Length          0009 (9)\n-40B24 Comment Length        0000 (0)\n-40B26 Disk Start            0000 (0)\n-40B28 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40B2A Ext File Attributes   00000000 (0)\n-40B2E Local Header Offset   000399F1 (236017)\n-40B32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40B32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40B78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40B7A   Length              0005 (5)\n-40B7C   Flags               01 (1) 'Modification'\n-40B7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40B81 CENTRAL HEADER #91    02014B50 (33639248)\n-40B85 Created Zip Spec      14 (20) '2.0'\n-40B86 Created OS            00 (0) 'MS-DOS'\n-40B87 Extract Zip Spec      14 (20) '2.0'\n-40B88 Extract OS            00 (0) 'MS-DOS'\n-40B89 General Purpose Flag  0000 (0)\n-40B8B Compression Method    0000 (0) 'Stored'\n-40B8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40B91 CRC                   00000000 (0)\n-40B95 Compressed Size       00000000 (0)\n-40B99 Uncompressed Size     00000000 (0)\n-40B9D Filename Length       0029 (41)\n-40B9F Extra Length          0009 (9)\n-40BA1 Comment Length        0000 (0)\n-40BA3 Disk Start            0000 (0)\n-40BA5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40BA7 Ext File Attributes   00000000 (0)\n-40BAB Local Header Offset   00039FB2 (237490)\n-40BAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40BAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40BD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40BDA   Length              0005 (5)\n-40BDC   Flags               01 (1) 'Modification'\n-40BDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40BE1 CENTRAL HEADER #92    02014B50 (33639248)\n-40BE5 Created Zip Spec      14 (20) '2.0'\n-40BE6 Created OS            00 (0) 'MS-DOS'\n-40BE7 Extract Zip Spec      14 (20) '2.0'\n-40BE8 Extract OS            00 (0) 'MS-DOS'\n-40BE9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40BEB Compression Method    0000 (0) 'Stored'\n-40BED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40BF1 CRC                   F6AB8A5C (4138437212)\n-40BF5 Compressed Size       00000B30 (2864)\n-40BF9 Uncompressed Size     00000B30 (2864)\n-40BFD Filename Length       0059 (89)\n-40BFF Extra Length          0009 (9)\n-40C01 Comment Length        0000 (0)\n-40C03 Disk Start            0000 (0)\n-40C05 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40C07 Ext File Attributes   00000000 (0)\n-40C0B Local Header Offset   0003A002 (237570)\n-40C0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40C0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40C68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40C6A   Length              0005 (5)\n-40C6C   Flags               01 (1) 'Modification'\n-40C6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40C71 CENTRAL HEADER #93    02014B50 (33639248)\n-40C75 Created Zip Spec      14 (20) '2.0'\n-40C76 Created OS            00 (0) 'MS-DOS'\n-40C77 Extract Zip Spec      14 (20) '2.0'\n-40C78 Extract OS            00 (0) 'MS-DOS'\n-40C79 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40C7B Compression Method    0000 (0) 'Stored'\n-40C7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40C81 CRC                   8ECDA075 (2395840629)\n-40C85 Compressed Size       00000705 (1797)\n-40C89 Uncompressed Size     00000705 (1797)\n-40C8D Filename Length       004D (77)\n-40C8F Extra Length          0009 (9)\n-40C91 Comment Length        0000 (0)\n-40C93 Disk Start            0000 (0)\n-40C95 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40C97 Ext File Attributes   00000000 (0)\n-40C9B Local Header Offset   0003ABC2 (240578)\n-40C9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40C9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40CEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40CEE   Length              0005 (5)\n-40CF0   Flags               01 (1) 'Modification'\n-40CF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40CF5 CENTRAL HEADER #94    02014B50 (33639248)\n-40CF9 Created Zip Spec      14 (20) '2.0'\n-40CFA Created OS            00 (0) 'MS-DOS'\n-40CFB Extract Zip Spec      14 (20) '2.0'\n-40CFC Extract OS            00 (0) 'MS-DOS'\n-40CFD General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40CFF Compression Method    0000 (0) 'Stored'\n-40D01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40D05 CRC                   C535197D (3308591485)\n-40D09 Compressed Size       00000700 (1792)\n-40D0D Uncompressed Size     00000700 (1792)\n-40D11 Filename Length       004C (76)\n-40D13 Extra Length          0009 (9)\n-40D15 Comment Length        0000 (0)\n-40D17 Disk Start            0000 (0)\n-40D19 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40D1B Ext File Attributes   00000000 (0)\n-40D1F Local Header Offset   0003B34B (242507)\n-40D23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40D23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40D6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40D71   Length              0005 (5)\n-40D73   Flags               01 (1) 'Modification'\n-40D74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40D78 CENTRAL HEADER #95    02014B50 (33639248)\n-40D7C Created Zip Spec      14 (20) '2.0'\n-40D7D Created OS            00 (0) 'MS-DOS'\n-40D7E Extract Zip Spec      14 (20) '2.0'\n-40D7F Extract OS            00 (0) 'MS-DOS'\n-40D80 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40D82 Compression Method    0000 (0) 'Stored'\n-40D84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40D88 CRC                   A895CAB3 (2828389043)\n-40D8C Compressed Size       00001870 (6256)\n-40D90 Uncompressed Size     00001870 (6256)\n-40D94 Filename Length       0052 (82)\n-40D96 Extra Length          0009 (9)\n-40D98 Comment Length        0000 (0)\n-40D9A Disk Start            0000 (0)\n-40D9C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40D9E Ext File Attributes   00000000 (0)\n-40DA2 Local Header Offset   0003BACE (244430)\n-40DA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+409E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+409E9   Length              0005 (5)\n+409EB   Flags               01 (1) 'Modification'\n+409EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+409F0 CENTRAL HEADER #36    02014B50 (33639248)\n+409F4 Created Zip Spec      14 (20) '2.0'\n+409F5 Created OS            00 (0) 'MS-DOS'\n+409F6 Extract Zip Spec      14 (20) '2.0'\n+409F7 Extract OS            00 (0) 'MS-DOS'\n+409F8 General Purpose Flag  0000 (0)\n+409FA Compression Method    0000 (0) 'Stored'\n+409FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40A00 CRC                   00000000 (0)\n+40A04 Compressed Size       00000000 (0)\n+40A08 Uncompressed Size     00000000 (0)\n+40A0C Filename Length       0025 (37)\n+40A0E Extra Length          0009 (9)\n+40A10 Comment Length        0000 (0)\n+40A12 Disk Start            0000 (0)\n+40A14 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40A16 Ext File Attributes   00000000 (0)\n+40A1A Local Header Offset   000126F3 (75507)\n+40A1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40A1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40A43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40A45   Length              0005 (5)\n+40A47   Flags               01 (1) 'Modification'\n+40A48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40A4C CENTRAL HEADER #37    02014B50 (33639248)\n+40A50 Created Zip Spec      14 (20) '2.0'\n+40A51 Created OS            00 (0) 'MS-DOS'\n+40A52 Extract Zip Spec      14 (20) '2.0'\n+40A53 Extract OS            00 (0) 'MS-DOS'\n+40A54 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40A56 Compression Method    0000 (0) 'Stored'\n+40A58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40A5C CRC                   812905CA (2166949322)\n+40A60 Compressed Size       00000A8E (2702)\n+40A64 Uncompressed Size     00000A8E (2702)\n+40A68 Filename Length       0041 (65)\n+40A6A Extra Length          0009 (9)\n+40A6C Comment Length        0000 (0)\n+40A6E Disk Start            0000 (0)\n+40A70 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40A72 Ext File Attributes   00000000 (0)\n+40A76 Local Header Offset   0001273F (75583)\n+40A7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40A7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40ABB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40ABD   Length              0005 (5)\n+40ABF   Flags               01 (1) 'Modification'\n+40AC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40AC4 CENTRAL HEADER #38    02014B50 (33639248)\n+40AC8 Created Zip Spec      14 (20) '2.0'\n+40AC9 Created OS            00 (0) 'MS-DOS'\n+40ACA Extract Zip Spec      14 (20) '2.0'\n+40ACB Extract OS            00 (0) 'MS-DOS'\n+40ACC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40ACE Compression Method    0000 (0) 'Stored'\n+40AD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40AD4 CRC                   D4CAE0D6 (3570065622)\n+40AD8 Compressed Size       00000F80 (3968)\n+40ADC Uncompressed Size     00000F80 (3968)\n+40AE0 Filename Length       0042 (66)\n+40AE2 Extra Length          0009 (9)\n+40AE4 Comment Length        0000 (0)\n+40AE6 Disk Start            0000 (0)\n+40AE8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40AEA Ext File Attributes   00000000 (0)\n+40AEE Local Header Offset   00013245 (78405)\n+40AF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40AF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40B34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40B36   Length              0005 (5)\n+40B38   Flags               01 (1) 'Modification'\n+40B39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40B3D CENTRAL HEADER #39    02014B50 (33639248)\n+40B41 Created Zip Spec      14 (20) '2.0'\n+40B42 Created OS            00 (0) 'MS-DOS'\n+40B43 Extract Zip Spec      14 (20) '2.0'\n+40B44 Extract OS            00 (0) 'MS-DOS'\n+40B45 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40B47 Compression Method    0000 (0) 'Stored'\n+40B49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40B4D CRC                   9C44854A (2621736266)\n+40B51 Compressed Size       00000D4A (3402)\n+40B55 Uncompressed Size     00000D4A (3402)\n+40B59 Filename Length       003F (63)\n+40B5B Extra Length          0009 (9)\n+40B5D Comment Length        0000 (0)\n+40B5F Disk Start            0000 (0)\n+40B61 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40B63 Ext File Attributes   00000000 (0)\n+40B67 Local Header Offset   0001423E (82494)\n+40B6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40B6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40BAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40BAC   Length              0005 (5)\n+40BAE   Flags               01 (1) 'Modification'\n+40BAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40BB3 CENTRAL HEADER #40    02014B50 (33639248)\n+40BB7 Created Zip Spec      14 (20) '2.0'\n+40BB8 Created OS            00 (0) 'MS-DOS'\n+40BB9 Extract Zip Spec      14 (20) '2.0'\n+40BBA Extract OS            00 (0) 'MS-DOS'\n+40BBB General Purpose Flag  0000 (0)\n+40BBD Compression Method    0000 (0) 'Stored'\n+40BBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40BC3 CRC                   00000000 (0)\n+40BC7 Compressed Size       00000000 (0)\n+40BCB Uncompressed Size     00000000 (0)\n+40BCF Filename Length       002D (45)\n+40BD1 Extra Length          0009 (9)\n+40BD3 Comment Length        0000 (0)\n+40BD5 Disk Start            0000 (0)\n+40BD7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40BD9 Ext File Attributes   00000000 (0)\n+40BDD Local Header Offset   00014FFE (86014)\n+40BE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40BE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40C0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40C10   Length              0005 (5)\n+40C12   Flags               01 (1) 'Modification'\n+40C13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40C17 CENTRAL HEADER #41    02014B50 (33639248)\n+40C1B Created Zip Spec      14 (20) '2.0'\n+40C1C Created OS            00 (0) 'MS-DOS'\n+40C1D Extract Zip Spec      14 (20) '2.0'\n+40C1E Extract OS            00 (0) 'MS-DOS'\n+40C1F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40C21 Compression Method    0000 (0) 'Stored'\n+40C23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40C27 CRC                   F46C8898 (4100753560)\n+40C2B Compressed Size       000006EB (1771)\n+40C2F Uncompressed Size     000006EB (1771)\n+40C33 Filename Length       0042 (66)\n+40C35 Extra Length          0009 (9)\n+40C37 Comment Length        0000 (0)\n+40C39 Disk Start            0000 (0)\n+40C3B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40C3D Ext File Attributes   00000000 (0)\n+40C41 Local Header Offset   00015052 (86098)\n+40C45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40C45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40C87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40C89   Length              0005 (5)\n+40C8B   Flags               01 (1) 'Modification'\n+40C8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40C90 CENTRAL HEADER #42    02014B50 (33639248)\n+40C94 Created Zip Spec      14 (20) '2.0'\n+40C95 Created OS            00 (0) 'MS-DOS'\n+40C96 Extract Zip Spec      14 (20) '2.0'\n+40C97 Extract OS            00 (0) 'MS-DOS'\n+40C98 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40C9A Compression Method    0000 (0) 'Stored'\n+40C9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40CA0 CRC                   82A5648F (2191877263)\n+40CA4 Compressed Size       00000B13 (2835)\n+40CA8 Uncompressed Size     00000B13 (2835)\n+40CAC Filename Length       0047 (71)\n+40CAE Extra Length          0009 (9)\n+40CB0 Comment Length        0000 (0)\n+40CB2 Disk Start            0000 (0)\n+40CB4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40CB6 Ext File Attributes   00000000 (0)\n+40CBA Local Header Offset   000157B6 (87990)\n+40CBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40CBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40D05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40D07   Length              0005 (5)\n+40D09   Flags               01 (1) 'Modification'\n+40D0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40D0E CENTRAL HEADER #43    02014B50 (33639248)\n+40D12 Created Zip Spec      14 (20) '2.0'\n+40D13 Created OS            00 (0) 'MS-DOS'\n+40D14 Extract Zip Spec      14 (20) '2.0'\n+40D15 Extract OS            00 (0) 'MS-DOS'\n+40D16 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40D18 Compression Method    0000 (0) 'Stored'\n+40D1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40D1E CRC                   DA27253B (3659998523)\n+40D22 Compressed Size       000009FE (2558)\n+40D26 Uncompressed Size     000009FE (2558)\n+40D2A Filename Length       0044 (68)\n+40D2C Extra Length          0009 (9)\n+40D2E Comment Length        0000 (0)\n+40D30 Disk Start            0000 (0)\n+40D32 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40D34 Ext File Attributes   00000000 (0)\n+40D38 Local Header Offset   00016347 (90951)\n+40D3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40D3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40D80 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40D82   Length              0005 (5)\n+40D84   Flags               01 (1) 'Modification'\n+40D85   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40D89 CENTRAL HEADER #44    02014B50 (33639248)\n+40D8D Created Zip Spec      14 (20) '2.0'\n+40D8E Created OS            00 (0) 'MS-DOS'\n+40D8F Extract Zip Spec      14 (20) '2.0'\n+40D90 Extract OS            00 (0) 'MS-DOS'\n+40D91 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40D93 Compression Method    0000 (0) 'Stored'\n+40D95 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40D99 CRC                   3AE3106C (987959404)\n+40D9D Compressed Size       000007D5 (2005)\n+40DA1 Uncompressed Size     000007D5 (2005)\n+40DA5 Filename Length       0041 (65)\n+40DA7 Extra Length          0009 (9)\n+40DA9 Comment Length        0000 (0)\n+40DAB Disk Start            0000 (0)\n+40DAD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40DAF Ext File Attributes   00000000 (0)\n+40DB3 Local Header Offset   00016DC0 (93632)\n+40DB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x40DA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x40DB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 40DF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 40DFA   Length              0005 (5)\n 40DFC   Flags               01 (1) 'Modification'\n 40DFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-40E01 CENTRAL HEADER #96    02014B50 (33639248)\n+40E01 CENTRAL HEADER #45    02014B50 (33639248)\n 40E05 Created Zip Spec      14 (20) '2.0'\n 40E06 Created OS            00 (0) 'MS-DOS'\n 40E07 Extract Zip Spec      14 (20) '2.0'\n 40E08 Extract OS            00 (0) 'MS-DOS'\n-40E09 General Purpose Flag  0000 (0)\n+40E09 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n 40E0B Compression Method    0000 (0) 'Stored'\n 40E0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40E11 CRC                   00000000 (0)\n-40E15 Compressed Size       00000000 (0)\n-40E19 Uncompressed Size     00000000 (0)\n-40E1D Filename Length       0020 (32)\n+40E11 CRC                   5241C10C (1380040972)\n+40E15 Compressed Size       00000C91 (3217)\n+40E19 Uncompressed Size     00000C91 (3217)\n+40E1D Filename Length       0040 (64)\n 40E1F Extra Length          0009 (9)\n 40E21 Comment Length        0000 (0)\n 40E23 Disk Start            0000 (0)\n 40E25 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n 40E27 Ext File Attributes   00000000 (0)\n-40E2B Local Header Offset   0003D3C7 (250823)\n-40E2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+40E2B Local Header Offset   0001760D (95757)\n+40E2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x40E2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x40E2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-40E4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40E51   Length              0005 (5)\n-40E53   Flags               01 (1) 'Modification'\n-40E54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40E58 CENTRAL HEADER #97    02014B50 (33639248)\n-40E5C Created Zip Spec      14 (20) '2.0'\n-40E5D Created OS            00 (0) 'MS-DOS'\n-40E5E Extract Zip Spec      14 (20) '2.0'\n-40E5F Extract OS            00 (0) 'MS-DOS'\n-40E60 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40E62 Compression Method    0000 (0) 'Stored'\n-40E64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-40E68 CRC                   C67BB267 (3329995367)\n-40E6C Compressed Size       0000106A (4202)\n-40E70 Uncompressed Size     0000106A (4202)\n-40E74 Filename Length       004C (76)\n-40E76 Extra Length          0009 (9)\n-40E78 Comment Length        0000 (0)\n-40E7A Disk Start            0000 (0)\n-40E7C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-40E7E Ext File Attributes   00000000 (0)\n-40E82 Local Header Offset   0003D40E (250894)\n-40E86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40E86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40ED2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40ED4   Length              0005 (5)\n-40ED6   Flags               01 (1) 'Modification'\n-40ED7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-40EDB END CENTRAL HEADER    06054B50 (101010256)\n-40EDF Number of this disk   0000 (0)\n-40EE1 Central Dir Disk no   0000 (0)\n-40EE3 Entries in this disk  0061 (97)\n-40EE5 Total Entries         0061 (97)\n-40EE7 Size of Central Dir   000029E0 (10720)\n-40EEB Offset to Central Dir 0003E4FB (255227)\n-40EEF Comment Length        0000 (0)\n+40E6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40E71   Length              0005 (5)\n+40E73   Flags               01 (1) 'Modification'\n+40E74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40E78 CENTRAL HEADER #46    02014B50 (33639248)\n+40E7C Created Zip Spec      14 (20) '2.0'\n+40E7D Created OS            00 (0) 'MS-DOS'\n+40E7E Extract Zip Spec      14 (20) '2.0'\n+40E7F Extract OS            00 (0) 'MS-DOS'\n+40E80 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40E82 Compression Method    0000 (0) 'Stored'\n+40E84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40E88 CRC                   30FBCCB4 (821808308)\n+40E8C Compressed Size       000005CD (1485)\n+40E90 Uncompressed Size     000005CD (1485)\n+40E94 Filename Length       003D (61)\n+40E96 Extra Length          0009 (9)\n+40E98 Comment Length        0000 (0)\n+40E9A Disk Start            0000 (0)\n+40E9C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40E9E Ext File Attributes   00000000 (0)\n+40EA2 Local Header Offset   00018315 (99093)\n+40EA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40EA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40EE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40EE5   Length              0005 (5)\n+40EE7   Flags               01 (1) 'Modification'\n+40EE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40EEC CENTRAL HEADER #47    02014B50 (33639248)\n+40EF0 Created Zip Spec      14 (20) '2.0'\n+40EF1 Created OS            00 (0) 'MS-DOS'\n+40EF2 Extract Zip Spec      14 (20) '2.0'\n+40EF3 Extract OS            00 (0) 'MS-DOS'\n+40EF4 General Purpose Flag  0000 (0)\n+40EF6 Compression Method    0000 (0) 'Stored'\n+40EF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40EFC CRC                   00000000 (0)\n+40F00 Compressed Size       00000000 (0)\n+40F04 Uncompressed Size     00000000 (0)\n+40F08 Filename Length       002B (43)\n+40F0A Extra Length          0009 (9)\n+40F0C Comment Length        0000 (0)\n+40F0E Disk Start            0000 (0)\n+40F10 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40F12 Ext File Attributes   00000000 (0)\n+40F16 Local Header Offset   00018956 (100694)\n+40F1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40F1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40F45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40F47   Length              0005 (5)\n+40F49   Flags               01 (1) 'Modification'\n+40F4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40F4E CENTRAL HEADER #48    02014B50 (33639248)\n+40F52 Created Zip Spec      14 (20) '2.0'\n+40F53 Created OS            00 (0) 'MS-DOS'\n+40F54 Extract Zip Spec      14 (20) '2.0'\n+40F55 Extract OS            00 (0) 'MS-DOS'\n+40F56 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40F58 Compression Method    0000 (0) 'Stored'\n+40F5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40F5E CRC                   397FE7C7 (964683719)\n+40F62 Compressed Size       00000592 (1426)\n+40F66 Uncompressed Size     00000592 (1426)\n+40F6A Filename Length       0045 (69)\n+40F6C Extra Length          0009 (9)\n+40F6E Comment Length        0000 (0)\n+40F70 Disk Start            0000 (0)\n+40F72 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40F74 Ext File Attributes   00000000 (0)\n+40F78 Local Header Offset   000189A8 (100776)\n+40F7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40F7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+40FC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+40FC3   Length              0005 (5)\n+40FC5   Flags               01 (1) 'Modification'\n+40FC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+40FCA CENTRAL HEADER #49    02014B50 (33639248)\n+40FCE Created Zip Spec      14 (20) '2.0'\n+40FCF Created OS            00 (0) 'MS-DOS'\n+40FD0 Extract Zip Spec      14 (20) '2.0'\n+40FD1 Extract OS            00 (0) 'MS-DOS'\n+40FD2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+40FD4 Compression Method    0000 (0) 'Stored'\n+40FD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+40FDA CRC                   6571F019 (1701965849)\n+40FDE Compressed Size       00000CAD (3245)\n+40FE2 Uncompressed Size     00000CAD (3245)\n+40FE6 Filename Length       0040 (64)\n+40FE8 Extra Length          0009 (9)\n+40FEA Comment Length        0000 (0)\n+40FEC Disk Start            0000 (0)\n+40FEE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+40FF0 Ext File Attributes   00000000 (0)\n+40FF4 Local Header Offset   00018FB6 (102326)\n+40FF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40FF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41038 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4103A   Length              0005 (5)\n+4103C   Flags               01 (1) 'Modification'\n+4103D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41041 CENTRAL HEADER #50    02014B50 (33639248)\n+41045 Created Zip Spec      14 (20) '2.0'\n+41046 Created OS            00 (0) 'MS-DOS'\n+41047 Extract Zip Spec      14 (20) '2.0'\n+41048 Extract OS            00 (0) 'MS-DOS'\n+41049 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4104B Compression Method    0000 (0) 'Stored'\n+4104D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41051 CRC                   7A468FD9 (2051444697)\n+41055 Compressed Size       00000C2C (3116)\n+41059 Uncompressed Size     00000C2C (3116)\n+4105D Filename Length       0041 (65)\n+4105F Extra Length          0009 (9)\n+41061 Comment Length        0000 (0)\n+41063 Disk Start            0000 (0)\n+41065 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41067 Ext File Attributes   00000000 (0)\n+4106B Local Header Offset   00019CDA (105690)\n+4106F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4106F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+410B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+410B2   Length              0005 (5)\n+410B4   Flags               01 (1) 'Modification'\n+410B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+410B9 CENTRAL HEADER #51    02014B50 (33639248)\n+410BD Created Zip Spec      14 (20) '2.0'\n+410BE Created OS            00 (0) 'MS-DOS'\n+410BF Extract Zip Spec      14 (20) '2.0'\n+410C0 Extract OS            00 (0) 'MS-DOS'\n+410C1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+410C3 Compression Method    0000 (0) 'Stored'\n+410C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+410C9 CRC                   FDA6691C (4255541532)\n+410CD Compressed Size       00001578 (5496)\n+410D1 Uncompressed Size     00001578 (5496)\n+410D5 Filename Length       003E (62)\n+410D7 Extra Length          0009 (9)\n+410D9 Comment Length        0000 (0)\n+410DB Disk Start            0000 (0)\n+410DD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+410DF Ext File Attributes   00000000 (0)\n+410E3 Local Header Offset   0001A97E (108926)\n+410E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x410E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41125 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41127   Length              0005 (5)\n+41129   Flags               01 (1) 'Modification'\n+4112A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4112E CENTRAL HEADER #52    02014B50 (33639248)\n+41132 Created Zip Spec      14 (20) '2.0'\n+41133 Created OS            00 (0) 'MS-DOS'\n+41134 Extract Zip Spec      14 (20) '2.0'\n+41135 Extract OS            00 (0) 'MS-DOS'\n+41136 General Purpose Flag  0000 (0)\n+41138 Compression Method    0000 (0) 'Stored'\n+4113A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4113E CRC                   00000000 (0)\n+41142 Compressed Size       00000000 (0)\n+41146 Uncompressed Size     00000000 (0)\n+4114A Filename Length       002A (42)\n+4114C Extra Length          0009 (9)\n+4114E Comment Length        0000 (0)\n+41150 Disk Start            0000 (0)\n+41152 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41154 Ext File Attributes   00000000 (0)\n+41158 Local Header Offset   0001BF6B (114539)\n+4115C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4115C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41186 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41188   Length              0005 (5)\n+4118A   Flags               01 (1) 'Modification'\n+4118B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4118F CENTRAL HEADER #53    02014B50 (33639248)\n+41193 Created Zip Spec      14 (20) '2.0'\n+41194 Created OS            00 (0) 'MS-DOS'\n+41195 Extract Zip Spec      14 (20) '2.0'\n+41196 Extract OS            00 (0) 'MS-DOS'\n+41197 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41199 Compression Method    0000 (0) 'Stored'\n+4119B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4119F CRC                   AD8A2A72 (2911513202)\n+411A3 Compressed Size       00000E16 (3606)\n+411A7 Uncompressed Size     00000E16 (3606)\n+411AB Filename Length       0039 (57)\n+411AD Extra Length          0009 (9)\n+411AF Comment Length        0000 (0)\n+411B1 Disk Start            0000 (0)\n+411B3 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+411B5 Ext File Attributes   00000000 (0)\n+411B9 Local Header Offset   0001BFBC (114620)\n+411BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x411BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+411F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+411F8   Length              0005 (5)\n+411FA   Flags               01 (1) 'Modification'\n+411FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+411FF CENTRAL HEADER #54    02014B50 (33639248)\n+41203 Created Zip Spec      14 (20) '2.0'\n+41204 Created OS            00 (0) 'MS-DOS'\n+41205 Extract Zip Spec      14 (20) '2.0'\n+41206 Extract OS            00 (0) 'MS-DOS'\n+41207 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41209 Compression Method    0000 (0) 'Stored'\n+4120B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4120F CRC                   EEF3CE31 (4008955441)\n+41213 Compressed Size       00000D4D (3405)\n+41217 Uncompressed Size     00000D4D (3405)\n+4121B Filename Length       0046 (70)\n+4121D Extra Length          0009 (9)\n+4121F Comment Length        0000 (0)\n+41221 Disk Start            0000 (0)\n+41223 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41225 Ext File Attributes   00000000 (0)\n+41229 Local Header Offset   0001CE42 (118338)\n+4122D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4122D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41273 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41275   Length              0005 (5)\n+41277   Flags               01 (1) 'Modification'\n+41278   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4127C CENTRAL HEADER #55    02014B50 (33639248)\n+41280 Created Zip Spec      14 (20) '2.0'\n+41281 Created OS            00 (0) 'MS-DOS'\n+41282 Extract Zip Spec      14 (20) '2.0'\n+41283 Extract OS            00 (0) 'MS-DOS'\n+41284 General Purpose Flag  0000 (0)\n+41286 Compression Method    0000 (0) 'Stored'\n+41288 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4128C CRC                   00000000 (0)\n+41290 Compressed Size       00000000 (0)\n+41294 Uncompressed Size     00000000 (0)\n+41298 Filename Length       0021 (33)\n+4129A Extra Length          0009 (9)\n+4129C Comment Length        0000 (0)\n+4129E Disk Start            0000 (0)\n+412A0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+412A2 Ext File Attributes   00000000 (0)\n+412A6 Local Header Offset   0001DC0C (121868)\n+412AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x412AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+412CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+412CD   Length              0005 (5)\n+412CF   Flags               01 (1) 'Modification'\n+412D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+412D4 CENTRAL HEADER #56    02014B50 (33639248)\n+412D8 Created Zip Spec      14 (20) '2.0'\n+412D9 Created OS            00 (0) 'MS-DOS'\n+412DA Extract Zip Spec      14 (20) '2.0'\n+412DB Extract OS            00 (0) 'MS-DOS'\n+412DC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+412DE Compression Method    0000 (0) 'Stored'\n+412E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+412E4 CRC                   B359713A (3008983354)\n+412E8 Compressed Size       00000BB3 (2995)\n+412EC Uncompressed Size     00000BB3 (2995)\n+412F0 Filename Length       0034 (52)\n+412F2 Extra Length          0009 (9)\n+412F4 Comment Length        0000 (0)\n+412F6 Disk Start            0000 (0)\n+412F8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+412FA Ext File Attributes   00000000 (0)\n+412FE Local Header Offset   0001DC54 (121940)\n+41302 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41302: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41336 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41338   Length              0005 (5)\n+4133A   Flags               01 (1) 'Modification'\n+4133B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4133F CENTRAL HEADER #57    02014B50 (33639248)\n+41343 Created Zip Spec      14 (20) '2.0'\n+41344 Created OS            00 (0) 'MS-DOS'\n+41345 Extract Zip Spec      14 (20) '2.0'\n+41346 Extract OS            00 (0) 'MS-DOS'\n+41347 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41349 Compression Method    0000 (0) 'Stored'\n+4134B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4134F CRC                   D1906BB3 (3515902899)\n+41353 Compressed Size       0000047E (1150)\n+41357 Uncompressed Size     0000047E (1150)\n+4135B Filename Length       003B (59)\n+4135D Extra Length          0009 (9)\n+4135F Comment Length        0000 (0)\n+41361 Disk Start            0000 (0)\n+41363 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41365 Ext File Attributes   00000000 (0)\n+41369 Local Header Offset   0001E872 (125042)\n+4136D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4136D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+413A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+413AA   Length              0005 (5)\n+413AC   Flags               01 (1) 'Modification'\n+413AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+413B1 CENTRAL HEADER #58    02014B50 (33639248)\n+413B5 Created Zip Spec      14 (20) '2.0'\n+413B6 Created OS            00 (0) 'MS-DOS'\n+413B7 Extract Zip Spec      14 (20) '2.0'\n+413B8 Extract OS            00 (0) 'MS-DOS'\n+413B9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+413BB Compression Method    0000 (0) 'Stored'\n+413BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+413C1 CRC                   0375CF6B (58052459)\n+413C5 Compressed Size       00000E60 (3680)\n+413C9 Uncompressed Size     00000E60 (3680)\n+413CD Filename Length       003C (60)\n+413CF Extra Length          0009 (9)\n+413D1 Comment Length        0000 (0)\n+413D3 Disk Start            0000 (0)\n+413D5 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+413D7 Ext File Attributes   00000000 (0)\n+413DB Local Header Offset   0001ED62 (126306)\n+413DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x413DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4141B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4141D   Length              0005 (5)\n+4141F   Flags               01 (1) 'Modification'\n+41420   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41424 CENTRAL HEADER #59    02014B50 (33639248)\n+41428 Created Zip Spec      14 (20) '2.0'\n+41429 Created OS            00 (0) 'MS-DOS'\n+4142A Extract Zip Spec      14 (20) '2.0'\n+4142B Extract OS            00 (0) 'MS-DOS'\n+4142C General Purpose Flag  0000 (0)\n+4142E Compression Method    0000 (0) 'Stored'\n+41430 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41434 CRC                   00000000 (0)\n+41438 Compressed Size       00000000 (0)\n+4143C Uncompressed Size     00000000 (0)\n+41440 Filename Length       002C (44)\n+41442 Extra Length          0009 (9)\n+41444 Comment Length        0000 (0)\n+41446 Disk Start            0000 (0)\n+41448 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4144A Ext File Attributes   00000000 (0)\n+4144E Local Header Offset   0001FC35 (130101)\n+41452 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41452: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4147E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41480   Length              0005 (5)\n+41482   Flags               01 (1) 'Modification'\n+41483   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41487 CENTRAL HEADER #60    02014B50 (33639248)\n+4148B Created Zip Spec      14 (20) '2.0'\n+4148C Created OS            00 (0) 'MS-DOS'\n+4148D Extract Zip Spec      14 (20) '2.0'\n+4148E Extract OS            00 (0) 'MS-DOS'\n+4148F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41491 Compression Method    0000 (0) 'Stored'\n+41493 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41497 CRC                   D7F68AC0 (3623258816)\n+4149B Compressed Size       0000091C (2332)\n+4149F Uncompressed Size     0000091C (2332)\n+414A3 Filename Length       0052 (82)\n+414A5 Extra Length          0009 (9)\n+414A7 Comment Length        0000 (0)\n+414A9 Disk Start            0000 (0)\n+414AB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+414AD Ext File Attributes   00000000 (0)\n+414B1 Local Header Offset   0001FC88 (130184)\n+414B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x414B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41507 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41509   Length              0005 (5)\n+4150B   Flags               01 (1) 'Modification'\n+4150C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41510 CENTRAL HEADER #61    02014B50 (33639248)\n+41514 Created Zip Spec      14 (20) '2.0'\n+41515 Created OS            00 (0) 'MS-DOS'\n+41516 Extract Zip Spec      14 (20) '2.0'\n+41517 Extract OS            00 (0) 'MS-DOS'\n+41518 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4151A Compression Method    0000 (0) 'Stored'\n+4151C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41520 CRC                   3D7B6838 (1031497784)\n+41524 Compressed Size       000003ED (1005)\n+41528 Uncompressed Size     000003ED (1005)\n+4152C Filename Length       0047 (71)\n+4152E Extra Length          0009 (9)\n+41530 Comment Length        0000 (0)\n+41532 Disk Start            0000 (0)\n+41534 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41536 Ext File Attributes   00000000 (0)\n+4153A Local Header Offset   0002062D (132653)\n+4153E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4153E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41585 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41587   Length              0005 (5)\n+41589   Flags               01 (1) 'Modification'\n+4158A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4158E CENTRAL HEADER #62    02014B50 (33639248)\n+41592 Created Zip Spec      14 (20) '2.0'\n+41593 Created OS            00 (0) 'MS-DOS'\n+41594 Extract Zip Spec      14 (20) '2.0'\n+41595 Extract OS            00 (0) 'MS-DOS'\n+41596 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41598 Compression Method    0000 (0) 'Stored'\n+4159A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4159E CRC                   475F83BC (1197441980)\n+415A2 Compressed Size       00000CBA (3258)\n+415A6 Uncompressed Size     00000CBA (3258)\n+415AA Filename Length       004E (78)\n+415AC Extra Length          0009 (9)\n+415AE Comment Length        0000 (0)\n+415B0 Disk Start            0000 (0)\n+415B2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+415B4 Ext File Attributes   00000000 (0)\n+415B8 Local Header Offset   00020A98 (133784)\n+415BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x415BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4160A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4160C   Length              0005 (5)\n+4160E   Flags               01 (1) 'Modification'\n+4160F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41613 CENTRAL HEADER #63    02014B50 (33639248)\n+41617 Created Zip Spec      14 (20) '2.0'\n+41618 Created OS            00 (0) 'MS-DOS'\n+41619 Extract Zip Spec      14 (20) '2.0'\n+4161A Extract OS            00 (0) 'MS-DOS'\n+4161B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4161D Compression Method    0000 (0) 'Stored'\n+4161F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41623 CRC                   97BCAA4D (2545723981)\n+41627 Compressed Size       0000085B (2139)\n+4162B Uncompressed Size     0000085B (2139)\n+4162F Filename Length       003C (60)\n+41631 Extra Length          0009 (9)\n+41633 Comment Length        0000 (0)\n+41635 Disk Start            0000 (0)\n+41637 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41639 Ext File Attributes   00000000 (0)\n+4163D Local Header Offset   000217D7 (137175)\n+41641 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41641: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4167D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4167F   Length              0005 (5)\n+41681   Flags               01 (1) 'Modification'\n+41682   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41686 CENTRAL HEADER #64    02014B50 (33639248)\n+4168A Created Zip Spec      14 (20) '2.0'\n+4168B Created OS            00 (0) 'MS-DOS'\n+4168C Extract Zip Spec      14 (20) '2.0'\n+4168D Extract OS            00 (0) 'MS-DOS'\n+4168E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41690 Compression Method    0000 (0) 'Stored'\n+41692 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41696 CRC                   A0F529B3 (2700421555)\n+4169A Compressed Size       00000CE3 (3299)\n+4169E Uncompressed Size     00000CE3 (3299)\n+416A2 Filename Length       0043 (67)\n+416A4 Extra Length          0009 (9)\n+416A6 Comment Length        0000 (0)\n+416A8 Disk Start            0000 (0)\n+416AA Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+416AC Ext File Attributes   00000000 (0)\n+416B0 Local Header Offset   000220A5 (139429)\n+416B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x416B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+416F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+416F9   Length              0005 (5)\n+416FB   Flags               01 (1) 'Modification'\n+416FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41700 CENTRAL HEADER #65    02014B50 (33639248)\n+41704 Created Zip Spec      14 (20) '2.0'\n+41705 Created OS            00 (0) 'MS-DOS'\n+41706 Extract Zip Spec      14 (20) '2.0'\n+41707 Extract OS            00 (0) 'MS-DOS'\n+41708 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4170A Compression Method    0000 (0) 'Stored'\n+4170C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41710 CRC                   0978E7E9 (158918633)\n+41714 Compressed Size       00000C93 (3219)\n+41718 Uncompressed Size     00000C93 (3219)\n+4171C Filename Length       004A (74)\n+4171E Extra Length          0009 (9)\n+41720 Comment Length        0000 (0)\n+41722 Disk Start            0000 (0)\n+41724 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41726 Ext File Attributes   00000000 (0)\n+4172A Local Header Offset   00022E02 (142850)\n+4172E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4172E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41778 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4177A   Length              0005 (5)\n+4177C   Flags               01 (1) 'Modification'\n+4177D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41781 CENTRAL HEADER #66    02014B50 (33639248)\n+41785 Created Zip Spec      14 (20) '2.0'\n+41786 Created OS            00 (0) 'MS-DOS'\n+41787 Extract Zip Spec      14 (20) '2.0'\n+41788 Extract OS            00 (0) 'MS-DOS'\n+41789 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4178B Compression Method    0000 (0) 'Stored'\n+4178D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41791 CRC                   0929F211 (153743889)\n+41795 Compressed Size       000008B7 (2231)\n+41799 Uncompressed Size     000008B7 (2231)\n+4179D Filename Length       004D (77)\n+4179F Extra Length          0009 (9)\n+417A1 Comment Length        0000 (0)\n+417A3 Disk Start            0000 (0)\n+417A5 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+417A7 Ext File Attributes   00000000 (0)\n+417AB Local Header Offset   00023B16 (146198)\n+417AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x417AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+417FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+417FE   Length              0005 (5)\n+41800   Flags               01 (1) 'Modification'\n+41801   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41805 CENTRAL HEADER #67    02014B50 (33639248)\n+41809 Created Zip Spec      14 (20) '2.0'\n+4180A Created OS            00 (0) 'MS-DOS'\n+4180B Extract Zip Spec      14 (20) '2.0'\n+4180C Extract OS            00 (0) 'MS-DOS'\n+4180D General Purpose Flag  0000 (0)\n+4180F Compression Method    0000 (0) 'Stored'\n+41811 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41815 CRC                   00000000 (0)\n+41819 Compressed Size       00000000 (0)\n+4181D Uncompressed Size     00000000 (0)\n+41821 Filename Length       0029 (41)\n+41823 Extra Length          0009 (9)\n+41825 Comment Length        0000 (0)\n+41827 Disk Start            0000 (0)\n+41829 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4182B Ext File Attributes   00000000 (0)\n+4182F Local Header Offset   00024451 (148561)\n+41833 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41833: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4185C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4185E   Length              0005 (5)\n+41860   Flags               01 (1) 'Modification'\n+41861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41865 CENTRAL HEADER #68    02014B50 (33639248)\n+41869 Created Zip Spec      14 (20) '2.0'\n+4186A Created OS            00 (0) 'MS-DOS'\n+4186B Extract Zip Spec      14 (20) '2.0'\n+4186C Extract OS            00 (0) 'MS-DOS'\n+4186D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4186F Compression Method    0000 (0) 'Stored'\n+41871 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41875 CRC                   26D63221 (651571745)\n+41879 Compressed Size       00005153 (20819)\n+4187D Uncompressed Size     00005153 (20819)\n+41881 Filename Length       0044 (68)\n+41883 Extra Length          0009 (9)\n+41885 Comment Length        0000 (0)\n+41887 Disk Start            0000 (0)\n+41889 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4188B Ext File Attributes   00000000 (0)\n+4188F Local Header Offset   000244A1 (148641)\n+41893 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41893: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+418D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+418D9   Length              0005 (5)\n+418DB   Flags               01 (1) 'Modification'\n+418DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+418E0 CENTRAL HEADER #69    02014B50 (33639248)\n+418E4 Created Zip Spec      14 (20) '2.0'\n+418E5 Created OS            00 (0) 'MS-DOS'\n+418E6 Extract Zip Spec      14 (20) '2.0'\n+418E7 Extract OS            00 (0) 'MS-DOS'\n+418E8 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+418EA Compression Method    0000 (0) 'Stored'\n+418EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+418F0 CRC                   16EA47E7 (384452583)\n+418F4 Compressed Size       00000A81 (2689)\n+418F8 Uncompressed Size     00000A81 (2689)\n+418FC Filename Length       004B (75)\n+418FE Extra Length          0009 (9)\n+41900 Comment Length        0000 (0)\n+41902 Disk Start            0000 (0)\n+41904 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41906 Ext File Attributes   00000000 (0)\n+4190A Local Header Offset   0002966F (169583)\n+4190E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4190E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41959 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4195B   Length              0005 (5)\n+4195D   Flags               01 (1) 'Modification'\n+4195E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41962 CENTRAL HEADER #70    02014B50 (33639248)\n+41966 Created Zip Spec      14 (20) '2.0'\n+41967 Created OS            00 (0) 'MS-DOS'\n+41968 Extract Zip Spec      14 (20) '2.0'\n+41969 Extract OS            00 (0) 'MS-DOS'\n+4196A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4196C Compression Method    0000 (0) 'Stored'\n+4196E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41972 CRC                   82826623 (2189583907)\n+41976 Compressed Size       0000052A (1322)\n+4197A Uncompressed Size     0000052A (1322)\n+4197E Filename Length       0037 (55)\n+41980 Extra Length          0009 (9)\n+41982 Comment Length        0000 (0)\n+41984 Disk Start            0000 (0)\n+41986 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41988 Ext File Attributes   00000000 (0)\n+4198C Local Header Offset   0002A172 (172402)\n+41990 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41990: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+419C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+419C9   Length              0005 (5)\n+419CB   Flags               01 (1) 'Modification'\n+419CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+419D0 CENTRAL HEADER #71    02014B50 (33639248)\n+419D4 Created Zip Spec      14 (20) '2.0'\n+419D5 Created OS            00 (0) 'MS-DOS'\n+419D6 Extract Zip Spec      14 (20) '2.0'\n+419D7 Extract OS            00 (0) 'MS-DOS'\n+419D8 General Purpose Flag  0000 (0)\n+419DA Compression Method    0000 (0) 'Stored'\n+419DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+419E0 CRC                   00000000 (0)\n+419E4 Compressed Size       00000000 (0)\n+419E8 Uncompressed Size     00000000 (0)\n+419EC Filename Length       001F (31)\n+419EE Extra Length          0009 (9)\n+419F0 Comment Length        0000 (0)\n+419F2 Disk Start            0000 (0)\n+419F4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+419F6 Ext File Attributes   00000000 (0)\n+419FA Local Header Offset   0002A70A (173834)\n+419FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x419FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41A1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41A1F   Length              0005 (5)\n+41A21   Flags               01 (1) 'Modification'\n+41A22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41A26 CENTRAL HEADER #72    02014B50 (33639248)\n+41A2A Created Zip Spec      14 (20) '2.0'\n+41A2B Created OS            00 (0) 'MS-DOS'\n+41A2C Extract Zip Spec      14 (20) '2.0'\n+41A2D Extract OS            00 (0) 'MS-DOS'\n+41A2E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41A30 Compression Method    0000 (0) 'Stored'\n+41A32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41A36 CRC                   25BB24C3 (633021635)\n+41A3A Compressed Size       000009A2 (2466)\n+41A3E Uncompressed Size     000009A2 (2466)\n+41A42 Filename Length       004D (77)\n+41A44 Extra Length          0009 (9)\n+41A46 Comment Length        0000 (0)\n+41A48 Disk Start            0000 (0)\n+41A4A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41A4C Ext File Attributes   00000000 (0)\n+41A50 Local Header Offset   0002A750 (173904)\n+41A54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41A54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41AA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41AA3   Length              0005 (5)\n+41AA5   Flags               01 (1) 'Modification'\n+41AA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41AAA CENTRAL HEADER #73    02014B50 (33639248)\n+41AAE Created Zip Spec      14 (20) '2.0'\n+41AAF Created OS            00 (0) 'MS-DOS'\n+41AB0 Extract Zip Spec      14 (20) '2.0'\n+41AB1 Extract OS            00 (0) 'MS-DOS'\n+41AB2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41AB4 Compression Method    0000 (0) 'Stored'\n+41AB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41ABA CRC                   9322DFB2 (2468536242)\n+41ABE Compressed Size       00003EDE (16094)\n+41AC2 Uncompressed Size     00003EDE (16094)\n+41AC6 Filename Length       0047 (71)\n+41AC8 Extra Length          0009 (9)\n+41ACA Comment Length        0000 (0)\n+41ACC Disk Start            0000 (0)\n+41ACE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41AD0 Ext File Attributes   00000000 (0)\n+41AD4 Local Header Offset   0002B176 (176502)\n+41AD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41AD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41B1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41B21   Length              0005 (5)\n+41B23   Flags               01 (1) 'Modification'\n+41B24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41B28 CENTRAL HEADER #74    02014B50 (33639248)\n+41B2C Created Zip Spec      14 (20) '2.0'\n+41B2D Created OS            00 (0) 'MS-DOS'\n+41B2E Extract Zip Spec      14 (20) '2.0'\n+41B2F Extract OS            00 (0) 'MS-DOS'\n+41B30 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41B32 Compression Method    0000 (0) 'Stored'\n+41B34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41B38 CRC                   EE2E13F4 (3995997172)\n+41B3C Compressed Size       00000A07 (2567)\n+41B40 Uncompressed Size     00000A07 (2567)\n+41B44 Filename Length       0045 (69)\n+41B46 Extra Length          0009 (9)\n+41B48 Comment Length        0000 (0)\n+41B4A Disk Start            0000 (0)\n+41B4C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41B4E Ext File Attributes   00000000 (0)\n+41B52 Local Header Offset   0002F0D2 (192722)\n+41B56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41B56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41B9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41B9D   Length              0005 (5)\n+41B9F   Flags               01 (1) 'Modification'\n+41BA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41BA4 CENTRAL HEADER #75    02014B50 (33639248)\n+41BA8 Created Zip Spec      14 (20) '2.0'\n+41BA9 Created OS            00 (0) 'MS-DOS'\n+41BAA Extract Zip Spec      14 (20) '2.0'\n+41BAB Extract OS            00 (0) 'MS-DOS'\n+41BAC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41BAE Compression Method    0000 (0) 'Stored'\n+41BB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41BB4 CRC                   9044A5F3 (2420418035)\n+41BB8 Compressed Size       00000D59 (3417)\n+41BBC Uncompressed Size     00000D59 (3417)\n+41BC0 Filename Length       0046 (70)\n+41BC2 Extra Length          0009 (9)\n+41BC4 Comment Length        0000 (0)\n+41BC6 Disk Start            0000 (0)\n+41BC8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41BCA Ext File Attributes   00000000 (0)\n+41BCE Local Header Offset   0002FB55 (195413)\n+41BD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41BD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41C18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41C1A   Length              0005 (5)\n+41C1C   Flags               01 (1) 'Modification'\n+41C1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41C21 CENTRAL HEADER #76    02014B50 (33639248)\n+41C25 Created Zip Spec      14 (20) '2.0'\n+41C26 Created OS            00 (0) 'MS-DOS'\n+41C27 Extract Zip Spec      14 (20) '2.0'\n+41C28 Extract OS            00 (0) 'MS-DOS'\n+41C29 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41C2B Compression Method    0000 (0) 'Stored'\n+41C2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41C31 CRC                   15CC2E88 (365702792)\n+41C35 Compressed Size       000007FE (2046)\n+41C39 Uncompressed Size     000007FE (2046)\n+41C3D Filename Length       0046 (70)\n+41C3F Extra Length          0009 (9)\n+41C41 Comment Length        0000 (0)\n+41C43 Disk Start            0000 (0)\n+41C45 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41C47 Ext File Attributes   00000000 (0)\n+41C4B Local Header Offset   0003092B (198955)\n+41C4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41C4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41C95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41C97   Length              0005 (5)\n+41C99   Flags               01 (1) 'Modification'\n+41C9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41C9E CENTRAL HEADER #77    02014B50 (33639248)\n+41CA2 Created Zip Spec      14 (20) '2.0'\n+41CA3 Created OS            00 (0) 'MS-DOS'\n+41CA4 Extract Zip Spec      14 (20) '2.0'\n+41CA5 Extract OS            00 (0) 'MS-DOS'\n+41CA6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41CA8 Compression Method    0000 (0) 'Stored'\n+41CAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41CAE CRC                   A00D3EBD (2685222589)\n+41CB2 Compressed Size       00001C52 (7250)\n+41CB6 Uncompressed Size     00001C52 (7250)\n+41CBA Filename Length       0033 (51)\n+41CBC Extra Length          0009 (9)\n+41CBE Comment Length        0000 (0)\n+41CC0 Disk Start            0000 (0)\n+41CC2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41CC4 Ext File Attributes   00000000 (0)\n+41CC8 Local Header Offset   000311A6 (201126)\n+41CCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41CCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41CFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41D01   Length              0005 (5)\n+41D03   Flags               01 (1) 'Modification'\n+41D04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41D08 CENTRAL HEADER #78    02014B50 (33639248)\n+41D0C Created Zip Spec      14 (20) '2.0'\n+41D0D Created OS            00 (0) 'MS-DOS'\n+41D0E Extract Zip Spec      14 (20) '2.0'\n+41D0F Extract OS            00 (0) 'MS-DOS'\n+41D10 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41D12 Compression Method    0000 (0) 'Stored'\n+41D14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41D18 CRC                   69F2CD2A (1777519914)\n+41D1C Compressed Size       0000129C (4764)\n+41D20 Uncompressed Size     0000129C (4764)\n+41D24 Filename Length       0039 (57)\n+41D26 Extra Length          0009 (9)\n+41D28 Comment Length        0000 (0)\n+41D2A Disk Start            0000 (0)\n+41D2C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41D2E Ext File Attributes   00000000 (0)\n+41D32 Local Header Offset   00032E62 (208482)\n+41D36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41D36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41D6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41D71   Length              0005 (5)\n+41D73   Flags               01 (1) 'Modification'\n+41D74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41D78 CENTRAL HEADER #79    02014B50 (33639248)\n+41D7C Created Zip Spec      14 (20) '2.0'\n+41D7D Created OS            00 (0) 'MS-DOS'\n+41D7E Extract Zip Spec      14 (20) '2.0'\n+41D7F Extract OS            00 (0) 'MS-DOS'\n+41D80 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41D82 Compression Method    0000 (0) 'Stored'\n+41D84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41D88 CRC                   3A871853 (981932115)\n+41D8C Compressed Size       000018D5 (6357)\n+41D90 Uncompressed Size     000018D5 (6357)\n+41D94 Filename Length       0036 (54)\n+41D96 Extra Length          0009 (9)\n+41D98 Comment Length        0000 (0)\n+41D9A Disk Start            0000 (0)\n+41D9C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41D9E Ext File Attributes   00000000 (0)\n+41DA2 Local Header Offset   0003416E (213358)\n+41DA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41DA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41DDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41DDE   Length              0005 (5)\n+41DE0   Flags               01 (1) 'Modification'\n+41DE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41DE5 CENTRAL HEADER #80    02014B50 (33639248)\n+41DE9 Created Zip Spec      14 (20) '2.0'\n+41DEA Created OS            00 (0) 'MS-DOS'\n+41DEB Extract Zip Spec      14 (20) '2.0'\n+41DEC Extract OS            00 (0) 'MS-DOS'\n+41DED General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41DEF Compression Method    0000 (0) 'Stored'\n+41DF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41DF5 CRC                   7BC9467A (2076788346)\n+41DF9 Compressed Size       00000CE6 (3302)\n+41DFD Uncompressed Size     00000CE6 (3302)\n+41E01 Filename Length       0037 (55)\n+41E03 Extra Length          0009 (9)\n+41E05 Comment Length        0000 (0)\n+41E07 Disk Start            0000 (0)\n+41E09 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41E0B Ext File Attributes   00000000 (0)\n+41E0F Local Header Offset   00035AB0 (219824)\n+41E13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41E13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41E4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41E4C   Length              0005 (5)\n+41E4E   Flags               01 (1) 'Modification'\n+41E4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41E53 CENTRAL HEADER #81    02014B50 (33639248)\n+41E57 Created Zip Spec      14 (20) '2.0'\n+41E58 Created OS            00 (0) 'MS-DOS'\n+41E59 Extract Zip Spec      14 (20) '2.0'\n+41E5A Extract OS            00 (0) 'MS-DOS'\n+41E5B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41E5D Compression Method    0000 (0) 'Stored'\n+41E5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41E63 CRC                   8442F5C1 (2218980801)\n+41E67 Compressed Size       000004E8 (1256)\n+41E6B Uncompressed Size     000004E8 (1256)\n+41E6F Filename Length       003D (61)\n+41E71 Extra Length          0009 (9)\n+41E73 Comment Length        0000 (0)\n+41E75 Disk Start            0000 (0)\n+41E77 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41E79 Ext File Attributes   00000000 (0)\n+41E7D Local Header Offset   00036804 (223236)\n+41E81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41E81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41EBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41EC0   Length              0005 (5)\n+41EC2   Flags               01 (1) 'Modification'\n+41EC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41EC7 CENTRAL HEADER #82    02014B50 (33639248)\n+41ECB Created Zip Spec      14 (20) '2.0'\n+41ECC Created OS            00 (0) 'MS-DOS'\n+41ECD Extract Zip Spec      14 (20) '2.0'\n+41ECE Extract OS            00 (0) 'MS-DOS'\n+41ECF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41ED1 Compression Method    0000 (0) 'Stored'\n+41ED3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41ED7 CRC                   1B483D0F (457719055)\n+41EDB Compressed Size       00000667 (1639)\n+41EDF Uncompressed Size     00000667 (1639)\n+41EE3 Filename Length       003F (63)\n+41EE5 Extra Length          0009 (9)\n+41EE7 Comment Length        0000 (0)\n+41EE9 Disk Start            0000 (0)\n+41EEB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41EED Ext File Attributes   00000000 (0)\n+41EF1 Local Header Offset   00036D60 (224608)\n+41EF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41EF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41F34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41F36   Length              0005 (5)\n+41F38   Flags               01 (1) 'Modification'\n+41F39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41F3D CENTRAL HEADER #83    02014B50 (33639248)\n+41F41 Created Zip Spec      14 (20) '2.0'\n+41F42 Created OS            00 (0) 'MS-DOS'\n+41F43 Extract Zip Spec      14 (20) '2.0'\n+41F44 Extract OS            00 (0) 'MS-DOS'\n+41F45 General Purpose Flag  0000 (0)\n+41F47 Compression Method    0000 (0) 'Stored'\n+41F49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41F4D CRC                   00000000 (0)\n+41F51 Compressed Size       00000000 (0)\n+41F55 Uncompressed Size     00000000 (0)\n+41F59 Filename Length       0025 (37)\n+41F5B Extra Length          0009 (9)\n+41F5D Comment Length        0000 (0)\n+41F5F Disk Start            0000 (0)\n+41F61 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41F63 Ext File Attributes   00000000 (0)\n+41F67 Local Header Offset   0003743D (226365)\n+41F6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41F6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41F90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41F92   Length              0005 (5)\n+41F94   Flags               01 (1) 'Modification'\n+41F95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41F99 CENTRAL HEADER #84    02014B50 (33639248)\n+41F9D Created Zip Spec      14 (20) '2.0'\n+41F9E Created OS            00 (0) 'MS-DOS'\n+41F9F Extract Zip Spec      14 (20) '2.0'\n+41FA0 Extract OS            00 (0) 'MS-DOS'\n+41FA1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41FA3 Compression Method    0000 (0) 'Stored'\n+41FA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41FA9 CRC                   B81EA5D5 (3089016277)\n+41FAD Compressed Size       00000B91 (2961)\n+41FB1 Uncompressed Size     00000B91 (2961)\n+41FB5 Filename Length       0048 (72)\n+41FB7 Extra Length          0009 (9)\n+41FB9 Comment Length        0000 (0)\n+41FBB Disk Start            0000 (0)\n+41FBD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+41FBF Ext File Attributes   00000000 (0)\n+41FC3 Local Header Offset   00037489 (226441)\n+41FC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41FC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4200F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+42011   Length              0005 (5)\n+42013   Flags               01 (1) 'Modification'\n+42014   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42018 CENTRAL HEADER #85    02014B50 (33639248)\n+4201C Created Zip Spec      14 (20) '2.0'\n+4201D Created OS            00 (0) 'MS-DOS'\n+4201E Extract Zip Spec      14 (20) '2.0'\n+4201F Extract OS            00 (0) 'MS-DOS'\n+42020 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+42022 Compression Method    0000 (0) 'Stored'\n+42024 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42028 CRC                   EF780E16 (4017622550)\n+4202C Compressed Size       00000562 (1378)\n+42030 Uncompressed Size     00000562 (1378)\n+42034 Filename Length       0045 (69)\n+42036 Extra Length          0009 (9)\n+42038 Comment Length        0000 (0)\n+4203A Disk Start            0000 (0)\n+4203C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4203E Ext File Attributes   00000000 (0)\n+42042 Local Header Offset   00038099 (229529)\n+42046 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42046: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4208B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4208D   Length              0005 (5)\n+4208F   Flags               01 (1) 'Modification'\n+42090   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42094 CENTRAL HEADER #86    02014B50 (33639248)\n+42098 Created Zip Spec      14 (20) '2.0'\n+42099 Created OS            00 (0) 'MS-DOS'\n+4209A Extract Zip Spec      14 (20) '2.0'\n+4209B Extract OS            00 (0) 'MS-DOS'\n+4209C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4209E Compression Method    0000 (0) 'Stored'\n+420A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+420A4 CRC                   CC678E8E (3429338766)\n+420A8 Compressed Size       000008A3 (2211)\n+420AC Uncompressed Size     000008A3 (2211)\n+420B0 Filename Length       0047 (71)\n+420B2 Extra Length          0009 (9)\n+420B4 Comment Length        0000 (0)\n+420B6 Disk Start            0000 (0)\n+420B8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+420BA Ext File Attributes   00000000 (0)\n+420BE Local Header Offset   00038677 (231031)\n+420C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x420C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+42109 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4210B   Length              0005 (5)\n+4210D   Flags               01 (1) 'Modification'\n+4210E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42112 CENTRAL HEADER #87    02014B50 (33639248)\n+42116 Created Zip Spec      14 (20) '2.0'\n+42117 Created OS            00 (0) 'MS-DOS'\n+42118 Extract Zip Spec      14 (20) '2.0'\n+42119 Extract OS            00 (0) 'MS-DOS'\n+4211A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4211C Compression Method    0000 (0) 'Stored'\n+4211E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42122 CRC                   5E735CAA (1584618666)\n+42126 Compressed Size       00001249 (4681)\n+4212A Uncompressed Size     00001249 (4681)\n+4212E Filename Length       004A (74)\n+42130 Extra Length          0009 (9)\n+42132 Comment Length        0000 (0)\n+42134 Disk Start            0000 (0)\n+42136 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+42138 Ext File Attributes   00000000 (0)\n+4213C Local Header Offset   00038F98 (233368)\n+42140 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42140: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4218A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4218C   Length              0005 (5)\n+4218E   Flags               01 (1) 'Modification'\n+4218F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42193 CENTRAL HEADER #88    02014B50 (33639248)\n+42197 Created Zip Spec      14 (20) '2.0'\n+42198 Created OS            00 (0) 'MS-DOS'\n+42199 Extract Zip Spec      14 (20) '2.0'\n+4219A Extract OS            00 (0) 'MS-DOS'\n+4219B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4219D Compression Method    0000 (0) 'Stored'\n+4219F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+421A3 CRC                   F08C4805 (4035725317)\n+421A7 Compressed Size       0000056A (1386)\n+421AB Uncompressed Size     0000056A (1386)\n+421AF Filename Length       0047 (71)\n+421B1 Extra Length          0009 (9)\n+421B3 Comment Length        0000 (0)\n+421B5 Disk Start            0000 (0)\n+421B7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+421B9 Ext File Attributes   00000000 (0)\n+421BD Local Header Offset   0003A262 (238178)\n+421C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x421C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+42208 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4220A   Length              0005 (5)\n+4220C   Flags               01 (1) 'Modification'\n+4220D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42211 CENTRAL HEADER #89    02014B50 (33639248)\n+42215 Created Zip Spec      14 (20) '2.0'\n+42216 Created OS            00 (0) 'MS-DOS'\n+42217 Extract Zip Spec      14 (20) '2.0'\n+42218 Extract OS            00 (0) 'MS-DOS'\n+42219 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4221B Compression Method    0000 (0) 'Stored'\n+4221D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42221 CRC                   EACCF2B1 (3939300017)\n+42225 Compressed Size       00000704 (1796)\n+42229 Uncompressed Size     00000704 (1796)\n+4222D Filename Length       004B (75)\n+4222F Extra Length          0009 (9)\n+42231 Comment Length        0000 (0)\n+42233 Disk Start            0000 (0)\n+42235 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+42237 Ext File Attributes   00000000 (0)\n+4223B Local Header Offset   0003A84A (239690)\n+4223F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4223F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4228A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4228C   Length              0005 (5)\n+4228E   Flags               01 (1) 'Modification'\n+4228F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42293 CENTRAL HEADER #90    02014B50 (33639248)\n+42297 Created Zip Spec      14 (20) '2.0'\n+42298 Created OS            00 (0) 'MS-DOS'\n+42299 Extract Zip Spec      14 (20) '2.0'\n+4229A Extract OS            00 (0) 'MS-DOS'\n+4229B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4229D Compression Method    0000 (0) 'Stored'\n+4229F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+422A3 CRC                   69ADD8AE (1773000878)\n+422A7 Compressed Size       00000566 (1382)\n+422AB Uncompressed Size     00000566 (1382)\n+422AF Filename Length       0046 (70)\n+422B1 Extra Length          0009 (9)\n+422B3 Comment Length        0000 (0)\n+422B5 Disk Start            0000 (0)\n+422B7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+422B9 Ext File Attributes   00000000 (0)\n+422BD Local Header Offset   0003AFD0 (241616)\n+422C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x422C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+42307 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+42309   Length              0005 (5)\n+4230B   Flags               01 (1) 'Modification'\n+4230C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42310 CENTRAL HEADER #91    02014B50 (33639248)\n+42314 Created Zip Spec      14 (20) '2.0'\n+42315 Created OS            00 (0) 'MS-DOS'\n+42316 Extract Zip Spec      14 (20) '2.0'\n+42317 Extract OS            00 (0) 'MS-DOS'\n+42318 General Purpose Flag  0000 (0)\n+4231A Compression Method    0000 (0) 'Stored'\n+4231C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42320 CRC                   00000000 (0)\n+42324 Compressed Size       00000000 (0)\n+42328 Uncompressed Size     00000000 (0)\n+4232C Filename Length       0029 (41)\n+4232E Extra Length          0009 (9)\n+42330 Comment Length        0000 (0)\n+42332 Disk Start            0000 (0)\n+42334 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+42336 Ext File Attributes   00000000 (0)\n+4233A Local Header Offset   0003B5B3 (243123)\n+4233E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4233E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+42367 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+42369   Length              0005 (5)\n+4236B   Flags               01 (1) 'Modification'\n+4236C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42370 CENTRAL HEADER #92    02014B50 (33639248)\n+42374 Created Zip Spec      14 (20) '2.0'\n+42375 Created OS            00 (0) 'MS-DOS'\n+42376 Extract Zip Spec      14 (20) '2.0'\n+42377 Extract OS            00 (0) 'MS-DOS'\n+42378 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4237A Compression Method    0000 (0) 'Stored'\n+4237C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42380 CRC                   2470BA0F (611367439)\n+42384 Compressed Size       00000B77 (2935)\n+42388 Uncompressed Size     00000B77 (2935)\n+4238C Filename Length       0059 (89)\n+4238E Extra Length          0009 (9)\n+42390 Comment Length        0000 (0)\n+42392 Disk Start            0000 (0)\n+42394 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+42396 Ext File Attributes   00000000 (0)\n+4239A Local Header Offset   0003B603 (243203)\n+4239E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4239E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+423F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+423F9   Length              0005 (5)\n+423FB   Flags               01 (1) 'Modification'\n+423FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42400 CENTRAL HEADER #93    02014B50 (33639248)\n+42404 Created Zip Spec      14 (20) '2.0'\n+42405 Created OS            00 (0) 'MS-DOS'\n+42406 Extract Zip Spec      14 (20) '2.0'\n+42407 Extract OS            00 (0) 'MS-DOS'\n+42408 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4240A Compression Method    0000 (0) 'Stored'\n+4240C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42410 CRC                   F02EA49E (4029588638)\n+42414 Compressed Size       00000730 (1840)\n+42418 Uncompressed Size     00000730 (1840)\n+4241C Filename Length       004D (77)\n+4241E Extra Length          0009 (9)\n+42420 Comment Length        0000 (0)\n+42422 Disk Start            0000 (0)\n+42424 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+42426 Ext File Attributes   00000000 (0)\n+4242A Local Header Offset   0003C20A (246282)\n+4242E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4242E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4247B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4247D   Length              0005 (5)\n+4247F   Flags               01 (1) 'Modification'\n+42480   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42484 CENTRAL HEADER #94    02014B50 (33639248)\n+42488 Created Zip Spec      14 (20) '2.0'\n+42489 Created OS            00 (0) 'MS-DOS'\n+4248A Extract Zip Spec      14 (20) '2.0'\n+4248B Extract OS            00 (0) 'MS-DOS'\n+4248C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4248E Compression Method    0000 (0) 'Stored'\n+42490 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42494 CRC                   91BA4E47 (2444906055)\n+42498 Compressed Size       0000072B (1835)\n+4249C Uncompressed Size     0000072B (1835)\n+424A0 Filename Length       004C (76)\n+424A2 Extra Length          0009 (9)\n+424A4 Comment Length        0000 (0)\n+424A6 Disk Start            0000 (0)\n+424A8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+424AA Ext File Attributes   00000000 (0)\n+424AE Local Header Offset   0003C9BE (248254)\n+424B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x424B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+424FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+42500   Length              0005 (5)\n+42502   Flags               01 (1) 'Modification'\n+42503   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42507 CENTRAL HEADER #95    02014B50 (33639248)\n+4250B Created Zip Spec      14 (20) '2.0'\n+4250C Created OS            00 (0) 'MS-DOS'\n+4250D Extract Zip Spec      14 (20) '2.0'\n+4250E Extract OS            00 (0) 'MS-DOS'\n+4250F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+42511 Compression Method    0000 (0) 'Stored'\n+42513 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+42517 CRC                   594A4504 (1498039556)\n+4251B Compressed Size       000018FD (6397)\n+4251F Uncompressed Size     000018FD (6397)\n+42523 Filename Length       0052 (82)\n+42525 Extra Length          0009 (9)\n+42527 Comment Length        0000 (0)\n+42529 Disk Start            0000 (0)\n+4252B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4252D Ext File Attributes   00000000 (0)\n+42531 Local Header Offset   0003D16C (250220)\n+42535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+42587 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+42589   Length              0005 (5)\n+4258B   Flags               01 (1) 'Modification'\n+4258C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+42590 CENTRAL HEADER #96    02014B50 (33639248)\n+42594 Created Zip Spec      14 (20) '2.0'\n+42595 Created OS            00 (0) 'MS-DOS'\n+42596 Extract Zip Spec      14 (20) '2.0'\n+42597 Extract OS            00 (0) 'MS-DOS'\n+42598 General Purpose Flag  0000 (0)\n+4259A Compression Method    0000 (0) 'Stored'\n+4259C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+425A0 CRC                   00000000 (0)\n+425A4 Compressed Size       00000000 (0)\n+425A8 Uncompressed Size     00000000 (0)\n+425AC Filename Length       0020 (32)\n+425AE Extra Length          0009 (9)\n+425B0 Comment Length        0000 (0)\n+425B2 Disk Start            0000 (0)\n+425B4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+425B6 Ext File Attributes   00000000 (0)\n+425BA Local Header Offset   0003EAF2 (256754)\n+425BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x425BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+425DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+425E0   Length              0005 (5)\n+425E2   Flags               01 (1) 'Modification'\n+425E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+425E7 CENTRAL HEADER #97    02014B50 (33639248)\n+425EB Created Zip Spec      14 (20) '2.0'\n+425EC Created OS            00 (0) 'MS-DOS'\n+425ED Extract Zip Spec      14 (20) '2.0'\n+425EE Extract OS            00 (0) 'MS-DOS'\n+425EF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+425F1 Compression Method    0000 (0) 'Stored'\n+425F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+425F7 CRC                   FF3DB830 (4282234928)\n+425FB Compressed Size       000010CE (4302)\n+425FF Uncompressed Size     000010CE (4302)\n+42603 Filename Length       004C (76)\n+42605 Extra Length          0009 (9)\n+42607 Comment Length        0000 (0)\n+42609 Disk Start            0000 (0)\n+4260B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+4260D Ext File Attributes   00000000 (0)\n+42611 Local Header Offset   0003EB39 (256825)\n+42615 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42615: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+42661 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+42663   Length              0005 (5)\n+42665   Flags               01 (1) 'Modification'\n+42666   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4266A END CENTRAL HEADER    06054B50 (101010256)\n+4266E Number of this disk   0000 (0)\n+42670 Central Dir Disk no   0000 (0)\n+42672 Entries in this disk  0061 (97)\n+42674 Total Entries         0061 (97)\n+42676 Size of Central Dir   000029E0 (10720)\n+4267A Offset to Central Dir 0003FC8A (261258)\n+4267E Comment Length        0000 (0)\n #\n # Warning Count: 194\n #\n # Done\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,4 +1,4 @@\n-array=org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder\n-collection=org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder\n-map=org.apache.dubbo.metadata.definition.builder.MapTypeBuilder\n+array=org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder\r\n+collection=org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder\r\n+map=org.apache.dubbo.metadata.definition.builder.MapTypeBuilder\r\n enum=org.apache.dubbo.metadata.definition.builder.EnumTypeBuilder\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,10 +1,10 @@\n-# JAX-RS's implementations\n-jax-rs.query-param = org.apache.dubbo.metadata.rest.jaxrs.QueryParamParameterProcessor\n-jax-rs.form-param = org.apache.dubbo.metadata.rest.jaxrs.FormParamParameterProcessor\n-jax-rs.matrix-param = org.apache.dubbo.metadata.rest.jaxrs.MatrixParamParameterProcessor\n-jax-rs.header-param = org.apache.dubbo.metadata.rest.jaxrs.HeaderParamParameterProcessor\n-jax-rs.default-value-param = org.apache.dubbo.metadata.rest.jaxrs.DefaultValueParameterProcessor\n-\n-# Spring Web MVC's implementations\n-spring-webmvc.request-param = org.apache.dubbo.metadata.rest.springmvc.RequestParamParameterProcessor\n+# JAX-RS's implementations\r\n+jax-rs.query-param = org.apache.dubbo.metadata.rest.jaxrs.QueryParamParameterProcessor\r\n+jax-rs.form-param = org.apache.dubbo.metadata.rest.jaxrs.FormParamParameterProcessor\r\n+jax-rs.matrix-param = org.apache.dubbo.metadata.rest.jaxrs.MatrixParamParameterProcessor\r\n+jax-rs.header-param = org.apache.dubbo.metadata.rest.jaxrs.HeaderParamParameterProcessor\r\n+jax-rs.default-value-param = org.apache.dubbo.metadata.rest.jaxrs.DefaultValueParameterProcessor\r\n+\r\n+# Spring Web MVC's implementations\r\n+spring-webmvc.request-param = org.apache.dubbo.metadata.rest.springmvc.RequestParamParameterProcessor\r\n spring-webmvc.request-header = org.apache.dubbo.metadata.rest.springmvc.RequestHeaderParameterProcessor\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,3 +1,3 @@\n-default =\n-jax-rs = org.apache.dubbo.metadata.rest.jaxrs.JAXRSServiceRestMetadataResolver\n+default =\r\n+jax-rs = org.apache.dubbo.metadata.rest.jaxrs.JAXRSServiceRestMetadataResolver\r\n spring-webmvc = org.apache.dubbo.metadata.rest.springmvc.SpringMvcServiceRestMetadataResolver\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.xml", "comments": ["Format-specific differences are supported for XML files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: XML 1.0 document, ASCII text, with CRLF line terminators"], "has_internal_linenos": true, "unified_diff": "@@ -1,192 +1,187 @@\n 00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version=\"1\n 00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0\" encoding=\"UT\n-00000020: 462d 3822 3f3e 0d0a 3c21 2d2d 0d0a 2020  F-8\"?>..<!--..  \n-00000030: 4c69 6365 6e73 6564 2074 6f20 7468 6520  Licensed to the \n-00000040: 4170 6163 6865 2053 6f66 7477 6172 6520  Apache Software \n-00000050: 466f 756e 6461 7469 6f6e 2028 4153 4629  Foundation (ASF)\n-00000060: 2075 6e64 6572 206f 6e65 206f 7220 6d6f   under one or mo\n-00000070: 7265 0d0a 2020 636f 6e74 7269 6275 746f  re..  contributo\n-00000080: 7220 6c69 6365 6e73 6520 6167 7265 656d  r license agreem\n-00000090: 656e 7473 2e20 2053 6565 2074 6865 204e  ents.  See the N\n-000000a0: 4f54 4943 4520 6669 6c65 2064 6973 7472  OTICE file distr\n-000000b0: 6962 7574 6564 2077 6974 680d 0a20 2074  ibuted with..  t\n-000000c0: 6869 7320 776f 726b 2066 6f72 2061 6464  his work for add\n-000000d0: 6974 696f 6e61 6c20 696e 666f 726d 6174  itional informat\n-000000e0: 696f 6e20 7265 6761 7264 696e 6720 636f  ion regarding co\n-000000f0: 7079 7269 6768 7420 6f77 6e65 7273 6869  pyright ownershi\n-00000100: 702e 0d0a 2020 5468 6520 4153 4620 6c69  p...  The ASF li\n-00000110: 6365 6e73 6573 2074 6869 7320 6669 6c65  censes this file\n-00000120: 2074 6f20 596f 7520 756e 6465 7220 7468   to You under th\n-00000130: 6520 4170 6163 6865 204c 6963 656e 7365  e Apache License\n-00000140: 2c20 5665 7273 696f 6e20 322e 300d 0a20  , Version 2.0.. \n-00000150: 2028 7468 6520 224c 6963 656e 7365 2229   (the \"License\")\n-00000160: 3b20 796f 7520 6d61 7920 6e6f 7420 7573  ; you may not us\n-00000170: 6520 7468 6973 2066 696c 6520 6578 6365  e this file exce\n-00000180: 7074 2069 6e20 636f 6d70 6c69 616e 6365  pt in compliance\n-00000190: 2077 6974 680d 0a20 2074 6865 204c 6963   with..  the Lic\n-000001a0: 656e 7365 2e20 2059 6f75 206d 6179 206f  ense.  You may o\n-000001b0: 6274 6169 6e20 6120 636f 7079 206f 6620  btain a copy of \n-000001c0: 7468 6520 4c69 6365 6e73 6520 6174 0d0a  the License at..\n-000001d0: 0d0a 2020 2020 2020 6874 7470 3a2f 2f77  ..      http://w\n-000001e0: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-000001f0: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000200: 2e30 0d0a 0d0a 2020 556e 6c65 7373 2072  .0....  Unless r\n-00000210: 6571 7569 7265 6420 6279 2061 7070 6c69  equired by appli\n-00000220: 6361 626c 6520 6c61 7720 6f72 2061 6772  cable law or agr\n-00000230: 6565 6420 746f 2069 6e20 7772 6974 696e  eed to in writin\n-00000240: 672c 2073 6f66 7477 6172 650d 0a20 2064  g, software..  d\n-00000250: 6973 7472 6962 7574 6564 2075 6e64 6572  istributed under\n-00000260: 2074 6865 204c 6963 656e 7365 2069 7320   the License is \n-00000270: 6469 7374 7269 6275 7465 6420 6f6e 2061  distributed on a\n-00000280: 6e20 2241 5320 4953 2220 4241 5349 532c  n \"AS IS\" BASIS,\n-00000290: 0d0a 2020 5749 5448 4f55 5420 5741 5252  ..  WITHOUT WARR\n-000002a0: 414e 5449 4553 204f 5220 434f 4e44 4954  ANTIES OR CONDIT\n-000002b0: 494f 4e53 204f 4620 414e 5920 4b49 4e44  IONS OF ANY KIND\n-000002c0: 2c20 6569 7468 6572 2065 7870 7265 7373  , either express\n-000002d0: 206f 7220 696d 706c 6965 642e 0d0a 2020   or implied...  \n-000002e0: 5365 6520 7468 6520 4c69 6365 6e73 6520  See the License \n-000002f0: 666f 7220 7468 6520 7370 6563 6966 6963  for the specific\n-00000300: 206c 616e 6775 6167 6520 676f 7665 726e   language govern\n-00000310: 696e 6720 7065 726d 6973 7369 6f6e 7320  ing permissions \n-00000320: 616e 640d 0a20 206c 696d 6974 6174 696f  and..  limitatio\n-00000330: 6e73 2075 6e64 6572 2074 6865 204c 6963  ns under the Lic\n-00000340: 656e 7365 2e0d 0a20 202d 2d3e 0d0a 3c70  ense...  -->..<p\n-00000350: 726f 6a65 6374 2078 7369 3a73 6368 656d  roject xsi:schem\n-00000360: 614c 6f63 6174 696f 6e3d 2268 7474 703a  aLocation=\"http:\n-00000370: 2f2f 6d61 7665 6e2e 6170 6163 6865 2e6f  //maven.apache.o\n-00000380: 7267 2f50 4f4d 2f34 2e30 2e30 2068 7474  rg/POM/4.0.0 htt\n-00000390: 7073 3a2f 2f6d 6176 656e 2e61 7061 6368  ps://maven.apach\n-000003a0: 652e 6f72 672f 7873 642f 6d61 7665 6e2d  e.org/xsd/maven-\n-000003b0: 342e 302e 302e 7873 6422 2078 6d6c 6e73  4.0.0.xsd\" xmlns\n-000003c0: 3d22 6874 7470 3a2f 2f6d 6176 656e 2e61  =\"http://maven.a\n-000003d0: 7061 6368 652e 6f72 672f 504f 4d2f 342e  pache.org/POM/4.\n-000003e0: 302e 3022 0d0a 2020 2020 786d 6c6e 733a  0.0\"..    xmlns:\n-000003f0: 7873 693d 2268 7474 703a 2f2f 7777 772e  xsi=\"http://www.\n-00000400: 7733 2e6f 7267 2f32 3030 312f 584d 4c53  w3.org/2001/XMLS\n-00000410: 6368 656d 612d 696e 7374 616e 6365 223e  chema-instance\">\n-00000420: 0d0a 2020 3c6d 6f64 656c 5665 7273 696f  ..  <modelVersio\n-00000430: 6e3e 342e 302e 303c 2f6d 6f64 656c 5665  n>4.0.0</modelVe\n-00000440: 7273 696f 6e3e 0d0a 2020 3c70 6172 656e  rsion>..  <paren\n-00000450: 743e 0d0a 2020 2020 3c67 726f 7570 4964  t>..    <groupId\n-00000460: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-00000470: 6f3c 2f67 726f 7570 4964 3e0d 0a20 2020  o</groupId>..   \n-00000480: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-00000490: 626f 2d6d 6574 6164 6174 613c 2f61 7274  bo-metadata</art\n-000004a0: 6966 6163 7449 643e 0d0a 2020 2020 3c76  ifactId>..    <v\n-000004b0: 6572 7369 6f6e 3e32 2e37 2e31 303c 2f76  ersion>2.7.10</v\n-000004c0: 6572 7369 6f6e 3e0d 0a20 203c 2f70 6172  ersion>..  </par\n-000004d0: 656e 743e 0d0a 2020 3c67 726f 7570 4964  ent>..  <groupId\n-000004e0: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-000004f0: 6f3c 2f67 726f 7570 4964 3e0d 0a20 203c  o</groupId>..  <\n-00000500: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n-00000510: 2d6d 6574 6164 6174 612d 6170 693c 2f61  -metadata-api</a\n-00000520: 7274 6966 6163 7449 643e 0d0a 2020 3c76  rtifactId>..  <v\n-00000530: 6572 7369 6f6e 3e32 2e37 2e31 303c 2f76  ersion>2.7.10</v\n-00000540: 6572 7369 6f6e 3e0d 0a20 203c 6e61 6d65  ersion>..  <name\n-00000550: 3e64 7562 626f 2d6d 6574 6164 6174 612d  >dubbo-metadata-\n-00000560: 6170 693c 2f6e 616d 653e 0d0a 2020 3c64  api</name>..  <d\n-00000570: 6573 6372 6970 7469 6f6e 3e54 6865 206d  escription>The m\n-00000580: 6574 6164 6174 6120 6d6f 6475 6c65 206f  etadata module o\n-00000590: 6620 4475 6262 6f20 7072 6f6a 6563 743c  f Dubbo project<\n-000005a0: 2f64 6573 6372 6970 7469 6f6e 3e0d 0a20  /description>.. \n-000005b0: 203c 6c69 6365 6e73 6573 3e0d 0a20 2020   <licenses>..   \n-000005c0: 203c 6c69 6365 6e73 653e 0d0a 2020 2020   <license>..    \n-000005d0: 2020 3c6e 616d 653e 4170 6163 6865 204c    <name>Apache L\n-000005e0: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n-000005f0: 322e 303c 2f6e 616d 653e 0d0a 2020 2020  2.0</name>..    \n-00000600: 2020 3c75 726c 3e68 7474 703a 2f2f 7777    <url>http://ww\n-00000610: 772e 6170 6163 6865 2e6f 7267 2f6c 6963  w.apache.org/lic\n-00000620: 656e 7365 732f 4c49 4345 4e53 452d 322e  enses/LICENSE-2.\n-00000630: 303c 2f75 726c 3e0d 0a20 2020 2020 203c  0</url>..      <\n-00000640: 6469 7374 7269 6275 7469 6f6e 3e72 6570  distribution>rep\n-00000650: 6f3c 2f64 6973 7472 6962 7574 696f 6e3e  o</distribution>\n-00000660: 0d0a 2020 2020 3c2f 6c69 6365 6e73 653e  ..    </license>\n-00000670: 0d0a 2020 3c2f 6c69 6365 6e73 6573 3e0d  ..  </licenses>.\n-00000680: 0a20 203c 6465 7065 6e64 656e 6369 6573  .  <dependencies\n-00000690: 3e0d 0a20 2020 203c 6465 7065 6e64 656e  >..    <dependen\n-000006a0: 6379 3e0d 0a20 2020 2020 203c 6772 6f75  cy>..      <grou\n-000006b0: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n-000006c0: 7562 626f 3c2f 6772 6f75 7049 643e 0d0a  ubbo</groupId>..\n-000006d0: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n-000006e0: 643e 6475 6262 6f2d 7270 632d 6170 693c  d>dubbo-rpc-api<\n-000006f0: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00000700: 2020 2020 3c76 6572 7369 6f6e 3e24 7b70      <version>${p\n-00000710: 726f 6a65 6374 2e70 6172 656e 742e 7665  roject.parent.ve\n-00000720: 7273 696f 6e7d 3c2f 7665 7273 696f 6e3e  rsion}</version>\n-00000730: 0d0a 2020 2020 2020 3c6f 7074 696f 6e61  ..      <optiona\n-00000740: 6c3e 7472 7565 3c2f 6f70 7469 6f6e 616c  l>true</optional\n-00000750: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000760: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-00000770: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-00000780: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n-00000790: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n-000007a0: 3e0d 0a20 2020 2020 203c 6172 7469 6661  >..      <artifa\n-000007b0: 6374 4964 3e64 7562 626f 2d63 6c75 7374  ctId>dubbo-clust\n-000007c0: 6572 3c2f 6172 7469 6661 6374 4964 3e0d  er</artifactId>.\n-000007d0: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n-000007e0: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n-000007f0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n-00000800: 6f6e 3e0d 0a20 2020 203c 2f64 6570 656e  on>..    </depen\n-00000810: 6465 6e63 793e 0d0a 2020 2020 3c64 6570  dency>..    <dep\n-00000820: 656e 6465 6e63 793e 0d0a 2020 2020 2020  endency>..      \n-00000830: 3c67 726f 7570 4964 3e63 6f6d 2e67 6f6f  <groupId>com.goo\n-00000840: 676c 652e 636f 6465 2e67 736f 6e3c 2f67  gle.code.gson</g\n-00000850: 726f 7570 4964 3e0d 0a20 2020 2020 203c  roupId>..      <\n-00000860: 6172 7469 6661 6374 4964 3e67 736f 6e3c  artifactId>gson<\n-00000870: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00000880: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000890: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-000008a0: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-000008b0: 643e 6f72 672e 6170 6163 6865 2e64 7562  d>org.apache.dub\n-000008c0: 626f 3c2f 6772 6f75 7049 643e 0d0a 2020  bo</groupId>..  \n-000008d0: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n-000008e0: 6475 6262 6f2d 636f 6e66 6967 6365 6e74  dubbo-configcent\n-000008f0: 6572 2d7a 6f6f 6b65 6570 6572 3c2f 6172  er-zookeeper</ar\n-00000900: 7469 6661 6374 4964 3e0d 0a20 2020 2020  tifactId>..     \n-00000910: 203c 7665 7273 696f 6e3e 247b 7072 6f6a   <version>${proj\n-00000920: 6563 742e 7061 7265 6e74 2e76 6572 7369  ect.parent.versi\n-00000930: 6f6e 7d3c 2f76 6572 7369 6f6e 3e0d 0a20  on}</version>.. \n-00000940: 2020 2020 203c 7363 6f70 653e 7465 7374       <scope>test\n-00000950: 3c2f 7363 6f70 653e 0d0a 2020 2020 3c2f  </scope>..    </\n-00000960: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00000970: 203c 6465 7065 6e64 656e 6379 3e0d 0a20   <dependency>.. \n-00000980: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n-00000990: 672e 6170 6163 6865 2e63 7572 6174 6f72  g.apache.curator\n-000009a0: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-000009b0: 2020 3c61 7274 6966 6163 7449 643e 6375    <artifactId>cu\n-000009c0: 7261 746f 722d 7465 7374 3c2f 6172 7469  rator-test</arti\n-000009d0: 6661 6374 4964 3e0d 0a20 2020 2020 203c  factId>..      <\n-000009e0: 7363 6f70 653e 7465 7374 3c2f 7363 6f70  scope>test</scop\n-000009f0: 653e 0d0a 2020 2020 3c2f 6465 7065 6e64  e>..    </depend\n-00000a00: 656e 6379 3e0d 0a20 2020 203c 6465 7065  ency>..    <depe\n-00000a10: 6e64 656e 6379 3e0d 0a20 2020 2020 203c  ndency>..      <\n-00000a20: 6772 6f75 7049 643e 6a61 7661 782e 7773  groupId>javax.ws\n-00000a30: 2e72 733c 2f67 726f 7570 4964 3e0d 0a20  .rs</groupId>.. \n-00000a40: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n-00000a50: 3e6a 6176 6178 2e77 732e 7273 2d61 7069  >javax.ws.rs-api\n-00000a60: 3c2f 6172 7469 6661 6374 4964 3e0d 0a20  </artifactId>.. \n-00000a70: 2020 2020 203c 7363 6f70 653e 7465 7374       <scope>test\n-00000a80: 3c2f 7363 6f70 653e 0d0a 2020 2020 3c2f  </scope>..    </\n-00000a90: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00000aa0: 203c 6465 7065 6e64 656e 6379 3e0d 0a20   <dependency>.. \n-00000ab0: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n-00000ac0: 672e 7370 7269 6e67 6672 616d 6577 6f72  g.springframewor\n-00000ad0: 6b3c 2f67 726f 7570 4964 3e0d 0a20 2020  k</groupId>..   \n-00000ae0: 2020 203c 6172 7469 6661 6374 4964 3e73     <artifactId>s\n-00000af0: 7072 696e 672d 7765 623c 2f61 7274 6966  pring-web</artif\n-00000b00: 6163 7449 643e 0d0a 2020 2020 2020 3c73  actId>..      <s\n-00000b10: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n-00000b20: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000b30: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-00000b40: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-00000b50: 726f 7570 4964 3e6f 7267 2e73 7072 696e  roupId>org.sprin\n-00000b60: 6766 7261 6d65 776f 726b 3c2f 6772 6f75  gframework</grou\n-00000b70: 7049 643e 0d0a 2020 2020 2020 3c61 7274  pId>..      <art\n-00000b80: 6966 6163 7449 643e 7370 7269 6e67 2d63  ifactId>spring-c\n-00000b90: 6f6e 7465 7874 3c2f 6172 7469 6661 6374  ontext</artifact\n-00000ba0: 4964 3e0d 0a20 2020 2020 203c 7363 6f70  Id>..      <scop\n-00000bb0: 653e 7465 7374 3c2f 7363 6f70 653e 0d0a  e>test</scope>..\n-00000bc0: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n-00000bd0: 3e0d 0a20 203c 2f64 6570 656e 6465 6e63  >..  </dependenc\n-00000be0: 6965 733e 0d0a 3c2f 7072 6f6a 6563 743e  ies>..</project>\n-00000bf0: 0d0a                                     ..\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 4c69  F-8\"?>.<!--.  Li\n+00000030: 6365 6e73 6564 2074 6f20 7468 6520 4170  censed to the Ap\n+00000040: 6163 6865 2053 6f66 7477 6172 6520 466f  ache Software Fo\n+00000050: 756e 6461 7469 6f6e 2028 4153 4629 2075  undation (ASF) u\n+00000060: 6e64 6572 206f 6e65 206f 7220 6d6f 7265  nder one or more\n+00000070: 0a20 2063 6f6e 7472 6962 7574 6f72 206c  .  contributor l\n+00000080: 6963 656e 7365 2061 6772 6565 6d65 6e74  icense agreement\n+00000090: 732e 2020 5365 6520 7468 6520 4e4f 5449  s.  See the NOTI\n+000000a0: 4345 2066 696c 6520 6469 7374 7269 6275  CE file distribu\n+000000b0: 7465 6420 7769 7468 0a20 2074 6869 7320  ted with.  this \n+000000c0: 776f 726b 2066 6f72 2061 6464 6974 696f  work for additio\n+000000d0: 6e61 6c20 696e 666f 726d 6174 696f 6e20  nal information \n+000000e0: 7265 6761 7264 696e 6720 636f 7079 7269  regarding copyri\n+000000f0: 6768 7420 6f77 6e65 7273 6869 702e 0a20  ght ownership.. \n+00000100: 2054 6865 2041 5346 206c 6963 656e 7365   The ASF license\n+00000110: 7320 7468 6973 2066 696c 6520 746f 2059  s this file to Y\n+00000120: 6f75 2075 6e64 6572 2074 6865 2041 7061  ou under the Apa\n+00000130: 6368 6520 4c69 6365 6e73 652c 2056 6572  che License, Ver\n+00000140: 7369 6f6e 2032 2e30 0a20 2028 7468 6520  sion 2.0.  (the \n+00000150: 224c 6963 656e 7365 2229 3b20 796f 7520  \"License\"); you \n+00000160: 6d61 7920 6e6f 7420 7573 6520 7468 6973  may not use this\n+00000170: 2066 696c 6520 6578 6365 7074 2069 6e20   file except in \n+00000180: 636f 6d70 6c69 616e 6365 2077 6974 680a  compliance with.\n+00000190: 2020 7468 6520 4c69 6365 6e73 652e 2020    the License.  \n+000001a0: 596f 7520 6d61 7920 6f62 7461 696e 2061  You may obtain a\n+000001b0: 2063 6f70 7920 6f66 2074 6865 204c 6963   copy of the Lic\n+000001c0: 656e 7365 2061 740a 0a20 2020 2020 2068  ense at..      h\n+000001d0: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+000001e0: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+000001f0: 4345 4e53 452d 322e 300a 0a20 2055 6e6c  CENSE-2.0..  Unl\n+00000200: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n+00000210: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n+00000220: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n+00000230: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n+00000240: 0a20 2064 6973 7472 6962 7574 6564 2075  .  distributed u\n+00000250: 6e64 6572 2074 6865 204c 6963 656e 7365  nder the License\n+00000260: 2069 7320 6469 7374 7269 6275 7465 6420   is distributed \n+00000270: 6f6e 2061 6e20 2241 5320 4953 2220 4241  on an \"AS IS\" BA\n+00000280: 5349 532c 0a20 2057 4954 484f 5554 2057  SIS,.  WITHOUT W\n+00000290: 4152 5241 4e54 4945 5320 4f52 2043 4f4e  ARRANTIES OR CON\n+000002a0: 4449 5449 4f4e 5320 4f46 2041 4e59 204b  DITIONS OF ANY K\n+000002b0: 494e 442c 2065 6974 6865 7220 6578 7072  IND, either expr\n+000002c0: 6573 7320 6f72 2069 6d70 6c69 6564 2e0a  ess or implied..\n+000002d0: 2020 5365 6520 7468 6520 4c69 6365 6e73    See the Licens\n+000002e0: 6520 666f 7220 7468 6520 7370 6563 6966  e for the specif\n+000002f0: 6963 206c 616e 6775 6167 6520 676f 7665  ic language gove\n+00000300: 726e 696e 6720 7065 726d 6973 7369 6f6e  rning permission\n+00000310: 7320 616e 640a 2020 6c69 6d69 7461 7469  s and.  limitati\n+00000320: 6f6e 7320 756e 6465 7220 7468 6520 4c69  ons under the Li\n+00000330: 6365 6e73 652e 0a20 202d 2d3e 0a3c 7072  cense..  -->.<pr\n+00000340: 6f6a 6563 7420 7873 693a 7363 6865 6d61  oject xsi:schema\n+00000350: 4c6f 6361 7469 6f6e 3d22 6874 7470 3a2f  Location=\"http:/\n+00000360: 2f6d 6176 656e 2e61 7061 6368 652e 6f72  /maven.apache.or\n+00000370: 672f 504f 4d2f 342e 302e 3020 6874 7470  g/POM/4.0.0 http\n+00000380: 733a 2f2f 6d61 7665 6e2e 6170 6163 6865  s://maven.apache\n+00000390: 2e6f 7267 2f78 7364 2f6d 6176 656e 2d34  .org/xsd/maven-4\n+000003a0: 2e30 2e30 2e78 7364 2220 786d 6c6e 733d  .0.0.xsd\" xmlns=\n+000003b0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n+000003c0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n+000003d0: 2e30 220a 2020 2020 786d 6c6e 733a 7873  .0\".    xmlns:xs\n+000003e0: 693d 2268 7474 703a 2f2f 7777 772e 7733  i=\"http://www.w3\n+000003f0: 2e6f 7267 2f32 3030 312f 584d 4c53 6368  .org/2001/XMLSch\n+00000400: 656d 612d 696e 7374 616e 6365 223e 0a20  ema-instance\">. \n+00000410: 203c 6d6f 6465 6c56 6572 7369 6f6e 3e34   <modelVersion>4\n+00000420: 2e30 2e30 3c2f 6d6f 6465 6c56 6572 7369  .0.0</modelVersi\n+00000430: 6f6e 3e0a 2020 3c70 6172 656e 743e 0a20  on>.  <parent>. \n+00000440: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000450: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n+00000460: 6f75 7049 643e 0a20 2020 203c 6172 7469  oupId>.    <arti\n+00000470: 6661 6374 4964 3e64 7562 626f 2d6d 6574  factId>dubbo-met\n+00000480: 6164 6174 613c 2f61 7274 6966 6163 7449  adata</artifactI\n+00000490: 643e 0a20 2020 203c 7665 7273 696f 6e3e  d>.    <version>\n+000004a0: 322e 372e 3130 3c2f 7665 7273 696f 6e3e  2.7.10</version>\n+000004b0: 0a20 203c 2f70 6172 656e 743e 0a20 203c  .  </parent>.  <\n+000004c0: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n+000004d0: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n+000004e0: 643e 0a20 203c 6172 7469 6661 6374 4964  d>.  <artifactId\n+000004f0: 3e64 7562 626f 2d6d 6574 6164 6174 612d  >dubbo-metadata-\n+00000500: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n+00000510: 0a20 203c 7665 7273 696f 6e3e 322e 372e  .  <version>2.7.\n+00000520: 3130 3c2f 7665 7273 696f 6e3e 0a20 203c  10</version>.  <\n+00000530: 6e61 6d65 3e64 7562 626f 2d6d 6574 6164  name>dubbo-metad\n+00000540: 6174 612d 6170 693c 2f6e 616d 653e 0a20  ata-api</name>. \n+00000550: 203c 6465 7363 7269 7074 696f 6e3e 5468   <description>Th\n+00000560: 6520 6d65 7461 6461 7461 206d 6f64 756c  e metadata modul\n+00000570: 6520 6f66 2044 7562 626f 2070 726f 6a65  e of Dubbo proje\n+00000580: 6374 3c2f 6465 7363 7269 7074 696f 6e3e  ct</description>\n+00000590: 0a20 203c 6c69 6365 6e73 6573 3e0a 2020  .  <licenses>.  \n+000005a0: 2020 3c6c 6963 656e 7365 3e0a 2020 2020    <license>.    \n+000005b0: 2020 3c6e 616d 653e 4170 6163 6865 204c    <name>Apache L\n+000005c0: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n+000005d0: 322e 303c 2f6e 616d 653e 0a20 2020 2020  2.0</name>.     \n+000005e0: 203c 7572 6c3e 6874 7470 3a2f 2f77 7777   <url>http://www\n+000005f0: 2e61 7061 6368 652e 6f72 672f 6c69 6365  .apache.org/lice\n+00000600: 6e73 6573 2f4c 4943 454e 5345 2d32 2e30  nses/LICENSE-2.0\n+00000610: 3c2f 7572 6c3e 0a20 2020 2020 203c 6469  </url>.      <di\n+00000620: 7374 7269 6275 7469 6f6e 3e72 6570 6f3c  stribution>repo<\n+00000630: 2f64 6973 7472 6962 7574 696f 6e3e 0a20  /distribution>. \n+00000640: 2020 203c 2f6c 6963 656e 7365 3e0a 2020     </license>.  \n+00000650: 3c2f 6c69 6365 6e73 6573 3e0a 2020 3c64  </licenses>.  <d\n+00000660: 6570 656e 6465 6e63 6965 733e 0a20 2020  ependencies>.   \n+00000670: 203c 6465 7065 6e64 656e 6379 3e0a 2020   <dependency>.  \n+00000680: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+00000690: 2e61 7061 6368 652e 6475 6262 6f3c 2f67  .apache.dubbo</g\n+000006a0: 726f 7570 4964 3e0a 2020 2020 2020 3c61  roupId>.      <a\n+000006b0: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n+000006c0: 7270 632d 6170 693c 2f61 7274 6966 6163  rpc-api</artifac\n+000006d0: 7449 643e 0a20 2020 2020 203c 7665 7273  tId>.      <vers\n+000006e0: 696f 6e3e 247b 7072 6f6a 6563 742e 7061  ion>${project.pa\n+000006f0: 7265 6e74 2e76 6572 7369 6f6e 7d3c 2f76  rent.version}</v\n+00000700: 6572 7369 6f6e 3e0a 2020 2020 2020 3c6f  ersion>.      <o\n+00000710: 7074 696f 6e61 6c3e 7472 7565 3c2f 6f70  ptional>true</op\n+00000720: 7469 6f6e 616c 3e0a 2020 2020 3c2f 6465  tional>.    </de\n+00000730: 7065 6e64 656e 6379 3e0a 2020 2020 3c64  pendency>.    <d\n+00000740: 6570 656e 6465 6e63 793e 0a20 2020 2020  ependency>.     \n+00000750: 203c 6772 6f75 7049 643e 6f72 672e 6170   <groupId>org.ap\n+00000760: 6163 6865 2e64 7562 626f 3c2f 6772 6f75  ache.dubbo</grou\n+00000770: 7049 643e 0a20 2020 2020 203c 6172 7469  pId>.      <arti\n+00000780: 6661 6374 4964 3e64 7562 626f 2d63 6c75  factId>dubbo-clu\n+00000790: 7374 6572 3c2f 6172 7469 6661 6374 4964  ster</artifactId\n+000007a0: 3e0a 2020 2020 2020 3c76 6572 7369 6f6e  >.      <version\n+000007b0: 3e24 7b70 726f 6a65 6374 2e70 6172 656e  >${project.paren\n+000007c0: 742e 7665 7273 696f 6e7d 3c2f 7665 7273  t.version}</vers\n+000007d0: 696f 6e3e 0a20 2020 203c 2f64 6570 656e  ion>.    </depen\n+000007e0: 6465 6e63 793e 0a20 2020 203c 6465 7065  dency>.    <depe\n+000007f0: 6e64 656e 6379 3e0a 2020 2020 2020 3c67  ndency>.      <g\n+00000800: 726f 7570 4964 3e63 6f6d 2e67 6f6f 676c  roupId>com.googl\n+00000810: 652e 636f 6465 2e67 736f 6e3c 2f67 726f  e.code.gson</gro\n+00000820: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+00000830: 6966 6163 7449 643e 6773 6f6e 3c2f 6172  ifactId>gson</ar\n+00000840: 7469 6661 6374 4964 3e0a 2020 2020 3c2f  tifactId>.    </\n+00000850: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000860: 3c64 6570 656e 6465 6e63 793e 0a20 2020  <dependency>.   \n+00000870: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000880: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n+00000890: 6f75 7049 643e 0a20 2020 2020 203c 6172  oupId>.      <ar\n+000008a0: 7469 6661 6374 4964 3e64 7562 626f 2d63  tifactId>dubbo-c\n+000008b0: 6f6e 6669 6763 656e 7465 722d 7a6f 6f6b  onfigcenter-zook\n+000008c0: 6565 7065 723c 2f61 7274 6966 6163 7449  eeper</artifactI\n+000008d0: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+000008e0: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n+000008f0: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n+00000900: 7369 6f6e 3e0a 2020 2020 2020 3c73 636f  sion>.      <sco\n+00000910: 7065 3e74 6573 743c 2f73 636f 7065 3e0a  pe>test</scope>.\n+00000920: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+00000930: 3e0a 2020 2020 3c64 6570 656e 6465 6e63  >.    <dependenc\n+00000940: 793e 0a20 2020 2020 203c 6772 6f75 7049  y>.      <groupI\n+00000950: 643e 6f72 672e 6170 6163 6865 2e63 7572  d>org.apache.cur\n+00000960: 6174 6f72 3c2f 6772 6f75 7049 643e 0a20  ator</groupId>. \n+00000970: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00000980: 3e63 7572 6174 6f72 2d74 6573 743c 2f61  >curator-test</a\n+00000990: 7274 6966 6163 7449 643e 0a20 2020 2020  rtifactId>.     \n+000009a0: 203c 7363 6f70 653e 7465 7374 3c2f 7363   <scope>test</sc\n+000009b0: 6f70 653e 0a20 2020 203c 2f64 6570 656e  ope>.    </depen\n+000009c0: 6465 6e63 793e 0a20 2020 203c 6465 7065  dency>.    <depe\n+000009d0: 6e64 656e 6379 3e0a 2020 2020 2020 3c67  ndency>.      <g\n+000009e0: 726f 7570 4964 3e6a 6176 6178 2e77 732e  roupId>javax.ws.\n+000009f0: 7273 3c2f 6772 6f75 7049 643e 0a20 2020  rs</groupId>.   \n+00000a00: 2020 203c 6172 7469 6661 6374 4964 3e6a     <artifactId>j\n+00000a10: 6176 6178 2e77 732e 7273 2d61 7069 3c2f  avax.ws.rs-api</\n+00000a20: 6172 7469 6661 6374 4964 3e0a 2020 2020  artifactId>.    \n+00000a30: 2020 3c73 636f 7065 3e74 6573 743c 2f73    <scope>test</s\n+00000a40: 636f 7065 3e0a 2020 2020 3c2f 6465 7065  cope>.    </depe\n+00000a50: 6e64 656e 6379 3e0a 2020 2020 3c64 6570  ndency>.    <dep\n+00000a60: 656e 6465 6e63 793e 0a20 2020 2020 203c  endency>.      <\n+00000a70: 6772 6f75 7049 643e 6f72 672e 7370 7269  groupId>org.spri\n+00000a80: 6e67 6672 616d 6577 6f72 6b3c 2f67 726f  ngframework</gro\n+00000a90: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+00000aa0: 6966 6163 7449 643e 7370 7269 6e67 2d77  ifactId>spring-w\n+00000ab0: 6562 3c2f 6172 7469 6661 6374 4964 3e0a  eb</artifactId>.\n+00000ac0: 2020 2020 2020 3c73 636f 7065 3e74 6573        <scope>tes\n+00000ad0: 743c 2f73 636f 7065 3e0a 2020 2020 3c2f  t</scope>.    </\n+00000ae0: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000af0: 3c64 6570 656e 6465 6e63 793e 0a20 2020  <dependency>.   \n+00000b00: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000b10: 7370 7269 6e67 6672 616d 6577 6f72 6b3c  springframework<\n+00000b20: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+00000b30: 3c61 7274 6966 6163 7449 643e 7370 7269  <artifactId>spri\n+00000b40: 6e67 2d63 6f6e 7465 7874 3c2f 6172 7469  ng-context</arti\n+00000b50: 6661 6374 4964 3e0a 2020 2020 2020 3c73  factId>.      <s\n+00000b60: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n+00000b70: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+00000b80: 6379 3e0a 2020 3c2f 6465 7065 6e64 656e  cy>.  </dependen\n+00000b90: 6369 6573 3e0a 3c2f 7072 6f6a 6563 743e  cies>.</project>\n+00000ba0: 0a                                       .\n"}, {"source1": "org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java", "source2": "org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,55 +1,55 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.LOADBALANCE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.remoting.Constants.CODEC_KEY;\n-import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\n-import static org.apache.dubbo.remoting.Constants.EXCHANGER_KEY;\n-import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\n-import static org.apache.dubbo.rpc.Constants.DEPRECATED_KEY;\n-import static org.apache.dubbo.rpc.Constants.MOCK_KEY;\n-import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\n-import static org.apache.dubbo.rpc.cluster.Constants.WARMUP_KEY;\n-import static org.apache.dubbo.rpc.cluster.Constants.WEIGHT_KEY;\n-\n-@Activate\n-public class DefaultMetadataParamsFilter implements MetadataParamsFilter {\n-    @Override\n-    public String[] serviceParamsIncluded() {\n-        return new String[]{\n-                CODEC_KEY, EXCHANGER_KEY, SERIALIZATION_KEY, CLUSTER_KEY, CONNECTIONS_KEY, DEPRECATED_KEY,\n-                GROUP_KEY, LOADBALANCE_KEY, MOCK_KEY, PATH_KEY, TIMEOUT_KEY, TOKEN_KEY, VERSION_KEY, WARMUP_KEY,\n-                WEIGHT_KEY, DUBBO_VERSION_KEY, RELEASE_KEY\n-        };\n-    }\n-\n-\n-    @Override\n-    public String[] instanceParamsIncluded() {\n-        return new String[0];\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.LOADBALANCE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CODEC_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.EXCHANGER_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.DEPRECATED_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.MOCK_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\r\n+import static org.apache.dubbo.rpc.cluster.Constants.WARMUP_KEY;\r\n+import static org.apache.dubbo.rpc.cluster.Constants.WEIGHT_KEY;\r\n+\r\n+@Activate\r\n+public class DefaultMetadataParamsFilter implements MetadataParamsFilter {\r\n+    @Override\r\n+    public String[] serviceParamsIncluded() {\r\n+        return new String[]{\r\n+                CODEC_KEY, EXCHANGER_KEY, SERIALIZATION_KEY, CLUSTER_KEY, CONNECTIONS_KEY, DEPRECATED_KEY,\r\n+                GROUP_KEY, LOADBALANCE_KEY, MOCK_KEY, PATH_KEY, TIMEOUT_KEY, TOKEN_KEY, VERSION_KEY, WARMUP_KEY,\r\n+                WEIGHT_KEY, DUBBO_VERSION_KEY, RELEASE_KEY\r\n+        };\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public String[] instanceParamsIncluded() {\r\n+        return new String[0];\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java", "source2": "org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,103 +1,103 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-\n-import java.util.Collections;\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.model.ApplicationModel.getName;\n-\n-/**\n- * The {@link ServiceNameMapping} implementation based on {@link DynamicConfiguration}\n- */\n-public class DynamicConfigurationServiceNameMapping implements ServiceNameMapping {\n-\n-    public static String DEFAULT_MAPPING_GROUP = \"mapping\";\n-\n-    private static final List<String> IGNORED_SERVICE_INTERFACES = asList(MetadataService.class.getName());\n-\n-    private final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    @Override\n-    public void map(URL url) {\n-        String serviceInterface = url.getServiceInterface();\n-        String group = url.getParameter(GROUP_KEY);\n-        String version = url.getParameter(VERSION_KEY);\n-        String protocol = url.getProtocol();\n-\n-        if (IGNORED_SERVICE_INTERFACES.contains(serviceInterface)) {\n-            return;\n-        }\n-\n-        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\n-\n-        // the Dubbo Service Key as group\n-        // the service(application) name as key\n-        // It does matter whatever the content is, we just need a record\n-        String key = getName();\n-        String content = valueOf(System.currentTimeMillis());\n-\n-        execute(() -> {\n-            dynamicConfiguration.publishConfig(key, ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol), content);\n-            if (logger.isInfoEnabled()) {\n-                logger.info(String.format(\"Dubbo service[%s] mapped to interface name[%s].\",\n-                        group, serviceInterface));\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public Set<String> getAndListen(URL url, MappingListener mappingListener) {\n-        String serviceInterface = url.getServiceInterface();\n-        String group = url.getParameter(GROUP_KEY);\n-        String version = url.getParameter(VERSION_KEY);\n-        String protocol = url.getProtocol();\n-        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\n-\n-        Set<String> serviceNames = new LinkedHashSet<>();\n-        execute(() -> {\n-            Set<String> keys = dynamicConfiguration\n-                    .getConfigKeys(ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol));\n-            if (CollectionUtils.isNotEmpty(keys)) {\n-                serviceNames.addAll(keys);\n-            }\n-        });\n-        return Collections.unmodifiableSet(serviceNames);\n-    }\n-\n-    private void execute(Runnable runnable) {\n-        try {\n-            runnable.run();\n-        } catch (Throwable e) {\n-            if (logger.isWarnEnabled()) {\n-                logger.warn(e.getMessage(), e);\n-            }\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.rpc.model.ApplicationModel.getName;\r\n+\r\n+/**\r\n+ * The {@link ServiceNameMapping} implementation based on {@link DynamicConfiguration}\r\n+ */\r\n+public class DynamicConfigurationServiceNameMapping implements ServiceNameMapping {\r\n+\r\n+    public static String DEFAULT_MAPPING_GROUP = \"mapping\";\r\n+\r\n+    private static final List<String> IGNORED_SERVICE_INTERFACES = asList(MetadataService.class.getName());\r\n+\r\n+    private final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    @Override\r\n+    public void map(URL url) {\r\n+        String serviceInterface = url.getServiceInterface();\r\n+        String group = url.getParameter(GROUP_KEY);\r\n+        String version = url.getParameter(VERSION_KEY);\r\n+        String protocol = url.getProtocol();\r\n+\r\n+        if (IGNORED_SERVICE_INTERFACES.contains(serviceInterface)) {\r\n+            return;\r\n+        }\r\n+\r\n+        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\r\n+\r\n+        // the Dubbo Service Key as group\r\n+        // the service(application) name as key\r\n+        // It does matter whatever the content is, we just need a record\r\n+        String key = getName();\r\n+        String content = valueOf(System.currentTimeMillis());\r\n+\r\n+        execute(() -> {\r\n+            dynamicConfiguration.publishConfig(key, ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol), content);\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(String.format(\"Dubbo service[%s] mapped to interface name[%s].\",\r\n+                        group, serviceInterface));\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public Set<String> getAndListen(URL url, MappingListener mappingListener) {\r\n+        String serviceInterface = url.getServiceInterface();\r\n+        String group = url.getParameter(GROUP_KEY);\r\n+        String version = url.getParameter(VERSION_KEY);\r\n+        String protocol = url.getProtocol();\r\n+        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\r\n+\r\n+        Set<String> serviceNames = new LinkedHashSet<>();\r\n+        execute(() -> {\r\n+            Set<String> keys = dynamicConfiguration\r\n+                    .getConfigKeys(ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol));\r\n+            if (CollectionUtils.isNotEmpty(keys)) {\r\n+                serviceNames.addAll(keys);\r\n+            }\r\n+        });\r\n+        return Collections.unmodifiableSet(serviceNames);\r\n+    }\r\n+\r\n+    private void execute(Runnable runnable) {\r\n+        try {\r\n+            runnable.run();\r\n+        } catch (Throwable e) {\r\n+            if (logger.isWarnEnabled()) {\r\n+                logger.warn(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MappingChangedEvent.java", "source2": "org/apache/dubbo/metadata/MappingChangedEvent.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,41 +1,41 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import java.util.Set;\n-\n-public class MappingChangedEvent {\n-    private String serviceKey;\n-    private Set<String> apps;\n-\n-    public String getServiceKey() {\n-        return serviceKey;\n-    }\n-\n-    public void setServiceKey(String serviceKey) {\n-        this.serviceKey = serviceKey;\n-    }\n-\n-    public Set<String> getApps() {\n-        return apps;\n-    }\n-\n-    public void setApps(Set<String> apps) {\n-        this.apps = apps;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import java.util.Set;\r\n+\r\n+public class MappingChangedEvent {\r\n+    private String serviceKey;\r\n+    private Set<String> apps;\r\n+\r\n+    public String getServiceKey() {\r\n+        return serviceKey;\r\n+    }\r\n+\r\n+    public void setServiceKey(String serviceKey) {\r\n+        this.serviceKey = serviceKey;\r\n+    }\r\n+\r\n+    public Set<String> getApps() {\r\n+        return apps;\r\n+    }\r\n+\r\n+    public void setApps(Set<String> apps) {\r\n+        this.apps = apps;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MappingListener.java", "source2": "org/apache/dubbo/metadata/MappingListener.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,21 +1,21 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-public interface MappingListener {\n-    void onEvent(MappingChangedEvent event);\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+public interface MappingListener {\r\n+    void onEvent(MappingChangedEvent event);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataChangeListener.java", "source2": "org/apache/dubbo/metadata/MetadataChangeListener.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,35 +1,35 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-public interface MetadataChangeListener {\n-    /**\n-     * Call when metadata in provider side update <p/>\n-     * Used to notify consumer to update metadata of ServiceInstance\n-     *\n-     * @param metadata latest metadata\n-     */\n-    void onEvent(String metadata);\n-\n-    /**\n-     * Echo test\n-     * Used to check consumer still online\n-     */\n-    default String echo(String msg) {\n-        return msg;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+public interface MetadataChangeListener {\r\n+    /**\r\n+     * Call when metadata in provider side update <p/>\r\n+     * Used to notify consumer to update metadata of ServiceInstance\r\n+     *\r\n+     * @param metadata latest metadata\r\n+     */\r\n+    void onEvent(String metadata);\r\n+\r\n+    /**\r\n+     * Echo test\r\n+     * Used to check consumer still online\r\n+     */\r\n+    default String echo(String msg) {\r\n+        return msg;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataConstants.java", "source2": "org/apache/dubbo/metadata/MetadataConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,30 +1,30 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-public class MetadataConstants {\n-    public static final String KEY_SEPARATOR = \":\";\n-    public static final String DEFAULT_PATH_TAG = \"metadata\";\n-    public static final String KEY_REVISION_PREFIX = \"revision\";\n-    public static final String META_DATA_STORE_TAG = \".metaData\";\n-    public static final String SERVICE_META_DATA_STORE_TAG = \".smd\";\n-    public static final String CONSUMER_META_DATA_STORE_TAG = \".cmd\";\n-    public static final String METADATA_PUBLISH_DELAY_KEY = \"dubbo.application.metadata.delay\";\n-    public static final int DEFAULT_METADATA_PUBLISH_DELAY = 5000;\n-    public static final String METADATA_PROXY_TIMEOUT_KEY = \"dubbo.application.metadata.delay\";\n-    public static final int DEFAULT_METADATA_TIMEOUT_VALUE = 5000;\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+public class MetadataConstants {\r\n+    public static final String KEY_SEPARATOR = \":\";\r\n+    public static final String DEFAULT_PATH_TAG = \"metadata\";\r\n+    public static final String KEY_REVISION_PREFIX = \"revision\";\r\n+    public static final String META_DATA_STORE_TAG = \".metaData\";\r\n+    public static final String SERVICE_META_DATA_STORE_TAG = \".smd\";\r\n+    public static final String CONSUMER_META_DATA_STORE_TAG = \".cmd\";\r\n+    public static final String METADATA_PUBLISH_DELAY_KEY = \"dubbo.application.metadata.delay\";\r\n+    public static final int DEFAULT_METADATA_PUBLISH_DELAY = 5000;\r\n+    public static final String METADATA_PROXY_TIMEOUT_KEY = \"dubbo.application.metadata.delay\";\r\n+    public static final int DEFAULT_METADATA_TIMEOUT_VALUE = 5000;\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataInfo.java", "source2": "org/apache/dubbo/metadata/MetadataInfo.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,449 +1,449 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.compiler.support.ClassUtils;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.io.Serializable;\n-import java.lang.reflect.Method;\n-import java.util.Collections;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.SortedSet;\n-import java.util.TreeSet;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DOT_SEPARATOR;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPARATOR;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-public class MetadataInfo implements Serializable {\n-    public static String DEFAULT_REVISION = \"0\";\n-    private String app;\n-    private String revision;\n-    private Map<String, ServiceInfo> services;\n-\n-    // used at runtime\n-    private transient Map<String, String> extendParams;\n-    private transient AtomicBoolean reported = new AtomicBoolean(false);\n-\n-    public MetadataInfo(String app) {\n-        this(app, null, null);\n-    }\n-\n-    public MetadataInfo(String app, String revision, Map<String, ServiceInfo> services) {\n-        this.app = app;\n-        this.revision = revision;\n-        this.services = services == null ? new HashMap<>() : services;\n-        this.extendParams = new HashMap<>();\n-    }\n-\n-    public void addService(ServiceInfo serviceInfo) {\n-        if (serviceInfo == null) {\n-            return;\n-        }\n-        this.services.put(serviceInfo.getMatchKey(), serviceInfo);\n-        markChanged();\n-    }\n-\n-    public void removeService(ServiceInfo serviceInfo) {\n-        if (serviceInfo == null) {\n-            return;\n-        }\n-        this.services.remove(serviceInfo.getMatchKey());\n-        markChanged();\n-    }\n-\n-    public void removeService(String key) {\n-        if (key == null) {\n-            return;\n-        }\n-        this.services.remove(key);\n-        markChanged();\n-    }\n-\n-    public String calAndGetRevision() {\n-        if (revision != null && hasReported()) {\n-            return revision;\n-        }\n-\n-        if (CollectionUtils.isEmptyMap(services)) {\n-            return DEFAULT_REVISION;\n-        }\n-\n-        StringBuilder sb = new StringBuilder();\n-        sb.append(app);\n-        for (Map.Entry<String, ServiceInfo> entry : services.entrySet()) {\n-            sb.append(entry.getValue().toDescString());\n-        }\n-        this.revision = RevisionResolver.calRevision(sb.toString());\n-        return revision;\n-    }\n-\n-    public void setRevision(String revision) {\n-        this.revision = revision;\n-    }\n-\n-    public boolean hasReported() {\n-        return reported.get();\n-    }\n-\n-    public void markReported() {\n-        reported.compareAndSet(false, true);\n-    }\n-\n-    public void markChanged() {\n-        reported.compareAndSet(true, false);\n-    }\n-\n-    public String getApp() {\n-        return app;\n-    }\n-\n-    public void setApp(String app) {\n-        this.app = app;\n-    }\n-\n-    public Map<String, ServiceInfo> getServices() {\n-        return services;\n-    }\n-\n-    public void setServices(Map<String, ServiceInfo> services) {\n-        this.services = services;\n-    }\n-\n-    public ServiceInfo getServiceInfo(String serviceKey) {\n-        return services.get(serviceKey);\n-    }\n-\n-    public Map<String, String> getExtendParams() {\n-        return extendParams;\n-    }\n-\n-    public String getParameter(String key, String serviceKey) {\n-        ServiceInfo serviceInfo = services.get(serviceKey);\n-        if (serviceInfo == null) {\n-            return null;\n-        }\n-        return serviceInfo.getParameter(key);\n-    }\n-\n-    public Map<String, String> getParameters(String serviceKey) {\n-        ServiceInfo serviceInfo = services.get(serviceKey);\n-        if (serviceInfo == null) {\n-            return Collections.emptyMap();\n-        }\n-        return serviceInfo.getAllParams();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"metadata{\" +\n-                \"app='\" + app + \"',\" +\n-                \"revision='\" + revision + \"',\" +\n-                \"services=\" + services +\n-                \"}\";\n-    }\n-\n-    public static class ServiceInfo implements Serializable {\n-        private static ExtensionLoader<MetadataParamsFilter> loader = ExtensionLoader.getExtensionLoader(MetadataParamsFilter.class);\n-        private String name;\n-        private String group;\n-        private String version;\n-        private String protocol;\n-        private String path; // most of the time, path is the same with the interface name.\n-        private Map<String, String> params;\n-\n-        // params configured on consumer side,\n-        private transient Map<String, String> consumerParams;\n-        // cached method params\n-        private transient Map<String, Map<String, String>> methodParams;\n-        private transient Map<String, Map<String, String>> consumerMethodParams;\n-        // cached numbers\n-        private transient Map<String, Number> numbers;\n-        private transient Map<String, Map<String, Number>> methodNumbers;\n-        // service + group + version\n-        private transient String serviceKey;\n-        // service + group + version + protocol\n-        private transient String matchKey;\n-\n-        private transient URL url;\n-\n-        public ServiceInfo() {\n-        }\n-\n-        public ServiceInfo(URL url) {\n-            this(url.getServiceInterface(), url.getParameter(GROUP_KEY), url.getParameter(VERSION_KEY), url.getProtocol(), url.getPath(), null);\n-\n-            this.url = url;\n-            Map<String, String> params = new HashMap<>();\n-            List<MetadataParamsFilter> filters = loader.getActivateExtension(url, \"params-filter\");\n-            for (MetadataParamsFilter filter : filters) {\n-                String[] paramsIncluded = filter.serviceParamsIncluded();\n-                if (ArrayUtils.isNotEmpty(paramsIncluded)) {\n-                    for (String p : paramsIncluded) {\n-                        String value = url.getParameter(p);\n-                        if (StringUtils.isNotEmpty(value) && params.get(p) == null) {\n-                            params.put(p, value);\n-                        }\n-                        String[] methods = url.getParameter(METHODS_KEY, (String[]) null);\n-                        if (methods != null) {\n-                            for (String method : methods) {\n-                                String mValue = url.getMethodParameterStrict(method, p);\n-                                if (StringUtils.isNotEmpty(mValue)) {\n-                                    params.put(method + DOT_SEPARATOR + p, mValue);\n-                                }\n-                            }\n-                        }\n-                    }\n-                }\n-            }\n-            this.params = params;\n-        }\n-\n-        public ServiceInfo(String name, String group, String version, String protocol, String path, Map<String, String> params) {\n-            this.name = name;\n-            this.group = group;\n-            this.version = version;\n-            this.protocol = protocol;\n-            this.path = path;\n-            this.params = params == null ? new HashMap<>() : params;\n-\n-            this.serviceKey = URL.buildKey(name, group, version);\n-            this.matchKey = buildMatchKey();\n-        }\n-\n-        public String getMatchKey() {\n-            if (matchKey != null) {\n-                return matchKey;\n-            }\n-            buildMatchKey();\n-            return matchKey;\n-        }\n-\n-        private String buildMatchKey() {\n-            matchKey = getServiceKey();\n-            if (StringUtils.isNotEmpty(protocol)) {\n-                matchKey = getServiceKey() + GROUP_CHAR_SEPARATOR + protocol;\n-            }\n-            return matchKey;\n-        }\n-\n-        public String getServiceKey() {\n-            if (serviceKey != null) {\n-                return serviceKey;\n-            }\n-            this.serviceKey = URL.buildKey(name, group, version);\n-            return serviceKey;\n-        }\n-\n-        public String getName() {\n-            return name;\n-        }\n-\n-        public void setName(String name) {\n-            this.name = name;\n-        }\n-\n-        public String getGroup() {\n-            return group;\n-        }\n-\n-        public void setGroup(String group) {\n-            this.group = group;\n-        }\n-\n-        public String getVersion() {\n-            return version;\n-        }\n-\n-        public void setVersion(String version) {\n-            this.version = version;\n-        }\n-\n-        public String getPath() {\n-            return path;\n-        }\n-\n-        public void setPath(String path) {\n-            this.path = path;\n-        }\n-\n-        public Map<String, String> getParams() {\n-            if (params == null) {\n-                return Collections.emptyMap();\n-            }\n-            return params;\n-        }\n-\n-        public void setParams(Map<String, String> params) {\n-            this.params = params;\n-        }\n-\n-        public Map<String, String> getAllParams() {\n-            if (consumerParams != null) {\n-                Map<String, String> allParams = new HashMap<>((int) ((params.size() + consumerParams.size()) / 0.75f + 1));\n-                allParams.putAll(params);\n-                allParams.putAll(consumerParams);\n-                return allParams;\n-            }\n-            return params;\n-        }\n-\n-        public String getParameter(String key) {\n-            if (consumerParams != null) {\n-                String value = consumerParams.get(key);\n-                if (value != null) {\n-                    return value;\n-                }\n-            }\n-            return params.get(key);\n-        }\n-\n-        public String getMethodParameter(String method, String key, String defaultValue) {\n-            if (methodParams == null) {\n-                methodParams = URL.toMethodParameters(params);\n-                consumerMethodParams = URL.toMethodParameters(consumerParams);\n-            }\n-\n-            String value = getMethodParameter(method, key, consumerMethodParams);\n-            if (value != null) {\n-                return value;\n-            }\n-            value = getMethodParameter(method, key, methodParams);\n-            return value == null ? defaultValue : value;\n-        }\n-\n-        private String getMethodParameter(String method, String key, Map<String, Map<String, String>> map) {\n-            Map<String, String> keyMap = map.get(method);\n-            String value = null;\n-            if (keyMap != null) {\n-                value = keyMap.get(key);\n-            }\n-            if (StringUtils.isEmpty(value)) {\n-                value = getParameter(key);\n-            }\n-            return value;\n-        }\n-\n-        public boolean hasMethodParameter(String method, String key) {\n-            String value = this.getMethodParameter(method, key, (String) null);\n-            return StringUtils.isNotEmpty(value);\n-        }\n-\n-        public boolean hasMethodParameter(String method) {\n-            if (methodParams == null) {\n-                methodParams = URL.toMethodParameters(params);\n-                consumerMethodParams = URL.toMethodParameters(consumerParams);\n-            }\n-\n-            return consumerMethodParams.containsKey(method) || methodParams.containsKey(method);\n-        }\n-\n-        public String toDescString() {\n-            return this.getMatchKey() + getMethodSignaturesString() + getParams();\n-        }\n-\n-        private String getMethodSignaturesString() {\n-            SortedSet<String> methodStrings = new TreeSet();\n-\n-            Method[] methods = ClassUtils.forName(name).getMethods();\n-            for (Method method : methods) {\n-                methodStrings.add(method.toString());\n-            }\n-            return methodStrings.toString();\n-        }\n-\n-        public void addParameter(String key, String value) {\n-            if (consumerParams != null) {\n-                this.consumerParams.put(key, value);\n-            }\n-        }\n-\n-        public void addParameterIfAbsent(String key, String value) {\n-            if (consumerParams != null) {\n-                this.consumerParams.putIfAbsent(key, value);\n-            }\n-        }\n-\n-        public void addConsumerParams(Map<String, String> params) {\n-            // copy once for one service subscription\n-            if (consumerParams == null) {\n-                consumerParams = new HashMap<>(params);\n-            }\n-        }\n-\n-        public Map<String, Number> getNumbers() {\n-            // concurrent initialization is tolerant\n-            if (numbers == null) {\n-                numbers = new ConcurrentHashMap<>();\n-            }\n-            return numbers;\n-        }\n-\n-        public Map<String, Map<String, Number>> getMethodNumbers() {\n-            if (methodNumbers == null) { // concurrent initialization is tolerant\n-                methodNumbers = new ConcurrentHashMap<>();\n-            }\n-            return methodNumbers;\n-        }\n-\n-        public URL getUrl() {\n-            return url;\n-        }\n-\n-        @Override\n-        public boolean equals(Object obj) {\n-            if (obj == null) {\n-                return false;\n-            }\n-            if (!(obj instanceof ServiceInfo)) {\n-                return false;\n-            }\n-\n-            ServiceInfo serviceInfo = (ServiceInfo) obj;\n-            return this.getMatchKey().equals(serviceInfo.getMatchKey()) && this.getParams().equals(serviceInfo.getParams());\n-        }\n-\n-        @Override\n-        public int hashCode() {\n-            return Objects.hash(getMatchKey(), getParams());\n-        }\n-\n-        @Override\n-        public String toString() {\n-            return \"service{\" +\n-                    \"name='\" + name + \"',\" +\n-                    \"group='\" + group + \"',\" +\n-                    \"version='\" + version + \"',\" +\n-                    \"protocol='\" + protocol + \"',\" +\n-                    \"params=\" + params + \",\" +\n-                    \"consumerParams=\" + consumerParams +\n-                    \"}\";\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.compiler.support.ClassUtils;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.utils.ArrayUtils;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.io.Serializable;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Collections;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.SortedSet;\r\n+import java.util.TreeSet;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DOT_SEPARATOR;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPARATOR;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+public class MetadataInfo implements Serializable {\r\n+    public static String DEFAULT_REVISION = \"0\";\r\n+    private String app;\r\n+    private String revision;\r\n+    private Map<String, ServiceInfo> services;\r\n+\r\n+    // used at runtime\r\n+    private transient Map<String, String> extendParams;\r\n+    private transient AtomicBoolean reported = new AtomicBoolean(false);\r\n+\r\n+    public MetadataInfo(String app) {\r\n+        this(app, null, null);\r\n+    }\r\n+\r\n+    public MetadataInfo(String app, String revision, Map<String, ServiceInfo> services) {\r\n+        this.app = app;\r\n+        this.revision = revision;\r\n+        this.services = services == null ? new HashMap<>() : services;\r\n+        this.extendParams = new HashMap<>();\r\n+    }\r\n+\r\n+    public void addService(ServiceInfo serviceInfo) {\r\n+        if (serviceInfo == null) {\r\n+            return;\r\n+        }\r\n+        this.services.put(serviceInfo.getMatchKey(), serviceInfo);\r\n+        markChanged();\r\n+    }\r\n+\r\n+    public void removeService(ServiceInfo serviceInfo) {\r\n+        if (serviceInfo == null) {\r\n+            return;\r\n+        }\r\n+        this.services.remove(serviceInfo.getMatchKey());\r\n+        markChanged();\r\n+    }\r\n+\r\n+    public void removeService(String key) {\r\n+        if (key == null) {\r\n+            return;\r\n+        }\r\n+        this.services.remove(key);\r\n+        markChanged();\r\n+    }\r\n+\r\n+    public String calAndGetRevision() {\r\n+        if (revision != null && hasReported()) {\r\n+            return revision;\r\n+        }\r\n+\r\n+        if (CollectionUtils.isEmptyMap(services)) {\r\n+            return DEFAULT_REVISION;\r\n+        }\r\n+\r\n+        StringBuilder sb = new StringBuilder();\r\n+        sb.append(app);\r\n+        for (Map.Entry<String, ServiceInfo> entry : services.entrySet()) {\r\n+            sb.append(entry.getValue().toDescString());\r\n+        }\r\n+        this.revision = RevisionResolver.calRevision(sb.toString());\r\n+        return revision;\r\n+    }\r\n+\r\n+    public void setRevision(String revision) {\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+    public boolean hasReported() {\r\n+        return reported.get();\r\n+    }\r\n+\r\n+    public void markReported() {\r\n+        reported.compareAndSet(false, true);\r\n+    }\r\n+\r\n+    public void markChanged() {\r\n+        reported.compareAndSet(true, false);\r\n+    }\r\n+\r\n+    public String getApp() {\r\n+        return app;\r\n+    }\r\n+\r\n+    public void setApp(String app) {\r\n+        this.app = app;\r\n+    }\r\n+\r\n+    public Map<String, ServiceInfo> getServices() {\r\n+        return services;\r\n+    }\r\n+\r\n+    public void setServices(Map<String, ServiceInfo> services) {\r\n+        this.services = services;\r\n+    }\r\n+\r\n+    public ServiceInfo getServiceInfo(String serviceKey) {\r\n+        return services.get(serviceKey);\r\n+    }\r\n+\r\n+    public Map<String, String> getExtendParams() {\r\n+        return extendParams;\r\n+    }\r\n+\r\n+    public String getParameter(String key, String serviceKey) {\r\n+        ServiceInfo serviceInfo = services.get(serviceKey);\r\n+        if (serviceInfo == null) {\r\n+            return null;\r\n+        }\r\n+        return serviceInfo.getParameter(key);\r\n+    }\r\n+\r\n+    public Map<String, String> getParameters(String serviceKey) {\r\n+        ServiceInfo serviceInfo = services.get(serviceKey);\r\n+        if (serviceInfo == null) {\r\n+            return Collections.emptyMap();\r\n+        }\r\n+        return serviceInfo.getAllParams();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"metadata{\" +\r\n+                \"app='\" + app + \"',\" +\r\n+                \"revision='\" + revision + \"',\" +\r\n+                \"services=\" + services +\r\n+                \"}\";\r\n+    }\r\n+\r\n+    public static class ServiceInfo implements Serializable {\r\n+        private static ExtensionLoader<MetadataParamsFilter> loader = ExtensionLoader.getExtensionLoader(MetadataParamsFilter.class);\r\n+        private String name;\r\n+        private String group;\r\n+        private String version;\r\n+        private String protocol;\r\n+        private String path; // most of the time, path is the same with the interface name.\r\n+        private Map<String, String> params;\r\n+\r\n+        // params configured on consumer side,\r\n+        private transient Map<String, String> consumerParams;\r\n+        // cached method params\r\n+        private transient Map<String, Map<String, String>> methodParams;\r\n+        private transient Map<String, Map<String, String>> consumerMethodParams;\r\n+        // cached numbers\r\n+        private transient Map<String, Number> numbers;\r\n+        private transient Map<String, Map<String, Number>> methodNumbers;\r\n+        // service + group + version\r\n+        private transient String serviceKey;\r\n+        // service + group + version + protocol\r\n+        private transient String matchKey;\r\n+\r\n+        private transient URL url;\r\n+\r\n+        public ServiceInfo() {\r\n+        }\r\n+\r\n+        public ServiceInfo(URL url) {\r\n+            this(url.getServiceInterface(), url.getParameter(GROUP_KEY), url.getParameter(VERSION_KEY), url.getProtocol(), url.getPath(), null);\r\n+\r\n+            this.url = url;\r\n+            Map<String, String> params = new HashMap<>();\r\n+            List<MetadataParamsFilter> filters = loader.getActivateExtension(url, \"params-filter\");\r\n+            for (MetadataParamsFilter filter : filters) {\r\n+                String[] paramsIncluded = filter.serviceParamsIncluded();\r\n+                if (ArrayUtils.isNotEmpty(paramsIncluded)) {\r\n+                    for (String p : paramsIncluded) {\r\n+                        String value = url.getParameter(p);\r\n+                        if (StringUtils.isNotEmpty(value) && params.get(p) == null) {\r\n+                            params.put(p, value);\r\n+                        }\r\n+                        String[] methods = url.getParameter(METHODS_KEY, (String[]) null);\r\n+                        if (methods != null) {\r\n+                            for (String method : methods) {\r\n+                                String mValue = url.getMethodParameterStrict(method, p);\r\n+                                if (StringUtils.isNotEmpty(mValue)) {\r\n+                                    params.put(method + DOT_SEPARATOR + p, mValue);\r\n+                                }\r\n+                            }\r\n+                        }\r\n+                    }\r\n+                }\r\n+            }\r\n+            this.params = params;\r\n+        }\r\n+\r\n+        public ServiceInfo(String name, String group, String version, String protocol, String path, Map<String, String> params) {\r\n+            this.name = name;\r\n+            this.group = group;\r\n+            this.version = version;\r\n+            this.protocol = protocol;\r\n+            this.path = path;\r\n+            this.params = params == null ? new HashMap<>() : params;\r\n+\r\n+            this.serviceKey = URL.buildKey(name, group, version);\r\n+            this.matchKey = buildMatchKey();\r\n+        }\r\n+\r\n+        public String getMatchKey() {\r\n+            if (matchKey != null) {\r\n+                return matchKey;\r\n+            }\r\n+            buildMatchKey();\r\n+            return matchKey;\r\n+        }\r\n+\r\n+        private String buildMatchKey() {\r\n+            matchKey = getServiceKey();\r\n+            if (StringUtils.isNotEmpty(protocol)) {\r\n+                matchKey = getServiceKey() + GROUP_CHAR_SEPARATOR + protocol;\r\n+            }\r\n+            return matchKey;\r\n+        }\r\n+\r\n+        public String getServiceKey() {\r\n+            if (serviceKey != null) {\r\n+                return serviceKey;\r\n+            }\r\n+            this.serviceKey = URL.buildKey(name, group, version);\r\n+            return serviceKey;\r\n+        }\r\n+\r\n+        public String getName() {\r\n+            return name;\r\n+        }\r\n+\r\n+        public void setName(String name) {\r\n+            this.name = name;\r\n+        }\r\n+\r\n+        public String getGroup() {\r\n+            return group;\r\n+        }\r\n+\r\n+        public void setGroup(String group) {\r\n+            this.group = group;\r\n+        }\r\n+\r\n+        public String getVersion() {\r\n+            return version;\r\n+        }\r\n+\r\n+        public void setVersion(String version) {\r\n+            this.version = version;\r\n+        }\r\n+\r\n+        public String getPath() {\r\n+            return path;\r\n+        }\r\n+\r\n+        public void setPath(String path) {\r\n+            this.path = path;\r\n+        }\r\n+\r\n+        public Map<String, String> getParams() {\r\n+            if (params == null) {\r\n+                return Collections.emptyMap();\r\n+            }\r\n+            return params;\r\n+        }\r\n+\r\n+        public void setParams(Map<String, String> params) {\r\n+            this.params = params;\r\n+        }\r\n+\r\n+        public Map<String, String> getAllParams() {\r\n+            if (consumerParams != null) {\r\n+                Map<String, String> allParams = new HashMap<>((int) ((params.size() + consumerParams.size()) / 0.75f + 1));\r\n+                allParams.putAll(params);\r\n+                allParams.putAll(consumerParams);\r\n+                return allParams;\r\n+            }\r\n+            return params;\r\n+        }\r\n+\r\n+        public String getParameter(String key) {\r\n+            if (consumerParams != null) {\r\n+                String value = consumerParams.get(key);\r\n+                if (value != null) {\r\n+                    return value;\r\n+                }\r\n+            }\r\n+            return params.get(key);\r\n+        }\r\n+\r\n+        public String getMethodParameter(String method, String key, String defaultValue) {\r\n+            if (methodParams == null) {\r\n+                methodParams = URL.toMethodParameters(params);\r\n+                consumerMethodParams = URL.toMethodParameters(consumerParams);\r\n+            }\r\n+\r\n+            String value = getMethodParameter(method, key, consumerMethodParams);\r\n+            if (value != null) {\r\n+                return value;\r\n+            }\r\n+            value = getMethodParameter(method, key, methodParams);\r\n+            return value == null ? defaultValue : value;\r\n+        }\r\n+\r\n+        private String getMethodParameter(String method, String key, Map<String, Map<String, String>> map) {\r\n+            Map<String, String> keyMap = map.get(method);\r\n+            String value = null;\r\n+            if (keyMap != null) {\r\n+                value = keyMap.get(key);\r\n+            }\r\n+            if (StringUtils.isEmpty(value)) {\r\n+                value = getParameter(key);\r\n+            }\r\n+            return value;\r\n+        }\r\n+\r\n+        public boolean hasMethodParameter(String method, String key) {\r\n+            String value = this.getMethodParameter(method, key, (String) null);\r\n+            return StringUtils.isNotEmpty(value);\r\n+        }\r\n+\r\n+        public boolean hasMethodParameter(String method) {\r\n+            if (methodParams == null) {\r\n+                methodParams = URL.toMethodParameters(params);\r\n+                consumerMethodParams = URL.toMethodParameters(consumerParams);\r\n+            }\r\n+\r\n+            return consumerMethodParams.containsKey(method) || methodParams.containsKey(method);\r\n+        }\r\n+\r\n+        public String toDescString() {\r\n+            return this.getMatchKey() + getMethodSignaturesString() + getParams();\r\n+        }\r\n+\r\n+        private String getMethodSignaturesString() {\r\n+            SortedSet<String> methodStrings = new TreeSet();\r\n+\r\n+            Method[] methods = ClassUtils.forName(name).getMethods();\r\n+            for (Method method : methods) {\r\n+                methodStrings.add(method.toString());\r\n+            }\r\n+            return methodStrings.toString();\r\n+        }\r\n+\r\n+        public void addParameter(String key, String value) {\r\n+            if (consumerParams != null) {\r\n+                this.consumerParams.put(key, value);\r\n+            }\r\n+        }\r\n+\r\n+        public void addParameterIfAbsent(String key, String value) {\r\n+            if (consumerParams != null) {\r\n+                this.consumerParams.putIfAbsent(key, value);\r\n+            }\r\n+        }\r\n+\r\n+        public void addConsumerParams(Map<String, String> params) {\r\n+            // copy once for one service subscription\r\n+            if (consumerParams == null) {\r\n+                consumerParams = new HashMap<>(params);\r\n+            }\r\n+        }\r\n+\r\n+        public Map<String, Number> getNumbers() {\r\n+            // concurrent initialization is tolerant\r\n+            if (numbers == null) {\r\n+                numbers = new ConcurrentHashMap<>();\r\n+            }\r\n+            return numbers;\r\n+        }\r\n+\r\n+        public Map<String, Map<String, Number>> getMethodNumbers() {\r\n+            if (methodNumbers == null) { // concurrent initialization is tolerant\r\n+                methodNumbers = new ConcurrentHashMap<>();\r\n+            }\r\n+            return methodNumbers;\r\n+        }\r\n+\r\n+        public URL getUrl() {\r\n+            return url;\r\n+        }\r\n+\r\n+        @Override\r\n+        public boolean equals(Object obj) {\r\n+            if (obj == null) {\r\n+                return false;\r\n+            }\r\n+            if (!(obj instanceof ServiceInfo)) {\r\n+                return false;\r\n+            }\r\n+\r\n+            ServiceInfo serviceInfo = (ServiceInfo) obj;\r\n+            return this.getMatchKey().equals(serviceInfo.getMatchKey()) && this.getParams().equals(serviceInfo.getParams());\r\n+        }\r\n+\r\n+        @Override\r\n+        public int hashCode() {\r\n+            return Objects.hash(getMatchKey(), getParams());\r\n+        }\r\n+\r\n+        @Override\r\n+        public String toString() {\r\n+            return \"service{\" +\r\n+                    \"name='\" + name + \"',\" +\r\n+                    \"group='\" + group + \"',\" +\r\n+                    \"version='\" + version + \"',\" +\r\n+                    \"protocol='\" + protocol + \"',\" +\r\n+                    \"params=\" + params + \",\" +\r\n+                    \"consumerParams=\" + consumerParams +\r\n+                    \"}\";\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataParamsFilter.java", "source2": "org/apache/dubbo/metadata/MetadataParamsFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,37 +1,37 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-@SPI\n-public interface MetadataParamsFilter {\n-\n-   /**\n-    * params that need to be sent to metadata center\n-    *\n-    * @return arrays of keys\n-    */\n-   String[] serviceParamsIncluded();\n-\n-   /**\n-    * params that need to be sent to registry center\n-    *\n-    * @return arrays of keys\n-    */\n-   String[] instanceParamsIncluded();\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+@SPI\r\n+public interface MetadataParamsFilter {\r\n+\r\n+   /**\r\n+    * params that need to be sent to metadata center\r\n+    *\r\n+    * @return arrays of keys\r\n+    */\r\n+   String[] serviceParamsIncluded();\r\n+\r\n+   /**\r\n+    * params that need to be sent to registry center\r\n+    *\r\n+    * @return arrays of keys\r\n+    */\r\n+   String[] instanceParamsIncluded();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataService.java", "source2": "org/apache/dubbo/metadata/MetadataService.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,273 +1,273 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.SortedSet;\n-import java.util.TreeSet;\n-import java.util.stream.Collectors;\n-import java.util.stream.Stream;\n-import java.util.stream.StreamSupport;\n-\n-import static java.util.Collections.unmodifiableSortedSet;\n-import static java.util.stream.StreamSupport.stream;\n-import static org.apache.dubbo.common.URL.buildKey;\n-\n-/**\n- * A framework interface of Dubbo Metadata Service defines the contract of Dubbo Services registration and subscription\n- * between Dubbo service providers and its consumers. The implementation will be exported as a normal Dubbo service that\n- * the clients would subscribe, whose version comes from the {@link #version()} method and group gets from\n- * {@link #serviceName()}, that means, The different Dubbo service(application) will export the different\n- * {@link MetadataService} that persists all the exported and subscribed metadata, they are present by\n- * {@link #getExportedURLs()} and {@link #getSubscribedURLs()} respectively. What's more, {@link MetadataService}\n- * also providers the fine-grain methods for the precise queries.\n- *\n- * @see WritableMetadataService\n- * @since 2.7.5\n- */\n-public interface MetadataService {\n-\n-    //FIXME the value is default, it was used by testing temporarily\n-    static final String DEFAULT_EXTENSION = \"default\";\n-\n-    /**\n-     * The value of all service names\n-     */\n-    String ALL_SERVICE_NAMES = \"*\";\n-\n-    /**\n-     * The value of All service instances\n-     */\n-    String ALL_SERVICE_INTERFACES = \"*\";\n-\n-    /**\n-     * The service interface name of {@link MetadataService}\n-     */\n-    String SERVICE_INTERFACE_NAME = MetadataService.class.getName();\n-\n-    /**\n-     * The contract version of {@link MetadataService}, the future update must make sure compatible.\n-     */\n-    String VERSION = \"1.0.0\";\n-\n-    /**\n-     * Gets the current Dubbo Service name\n-     *\n-     * @return non-null\n-     */\n-    String serviceName();\n-\n-    /**\n-     * Gets the version of {@link MetadataService} that always equals {@link #VERSION}\n-     *\n-     * @return non-null\n-     * @see #VERSION\n-     */\n-    default String version() {\n-        return VERSION;\n-    }\n-\n-    /**\n-     * the list of String that presents all Dubbo subscribed {@link URL urls}\n-     *\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getSubscribedURLs() {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents all Dubbo exported {@link URL urls}\n-     *\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs() {\n-        return getExportedURLs(ALL_SERVICE_INTERFACES);\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the <code>serviceInterface</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs(String serviceInterface) {\n-        return getExportedURLs(serviceInterface, null);\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\n-     * <code>serviceInterface</code> and <code>group</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @param group            the Dubbo Service Group (optional)\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs(String serviceInterface, String group) {\n-        return getExportedURLs(serviceInterface, group, null);\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\n-     * <code>serviceInterface</code>, <code>group</code> and <code>version</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @param group            the Dubbo Service Group (optional)\n-     * @param version          the Dubbo Service Version (optional)\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs(String serviceInterface, String group, String version) {\n-        return getExportedURLs(serviceInterface, group, version, null);\n-    }\n-\n-    /**\n-     * Get the sorted set of String that presents the specified Dubbo exported {@link URL urls} by the\n-     * <code>serviceInterface</code>, <code>group</code>, <code>version</code> and <code>protocol</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @param group            the Dubbo Service Group (optional)\n-     * @param version          the Dubbo Service Version (optional)\n-     * @param protocol         the Dubbo Service Protocol (optional)\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    SortedSet<String> getExportedURLs(String serviceInterface, String group, String version, String protocol);\n-\n-    /**\n-     * Interface definition.\n-     *\n-     * @return\n-     */\n-    default String getServiceDefinition(String interfaceName, String version, String group) {\n-        return getServiceDefinition(buildKey(interfaceName, group, version));\n-    }\n-\n-    /**\n-     * Interface definition.\n-     *\n-     * @return\n-     */\n-    String getServiceDefinition(String serviceKey);\n-\n-    MetadataInfo getMetadataInfo(String revision);\n-\n-    Map<String, MetadataInfo> getMetadataInfos();\n-\n-    /**\n-     * Is the {@link URL} for the {@link MetadataService} or not?\n-     *\n-     * @param url {@link URL url}\n-     * @return\n-     */\n-    static boolean isMetadataServiceURL(URL url) {\n-        String serviceInterface = url.getServiceInterface();\n-        return SERVICE_INTERFACE_NAME.equals(serviceInterface);\n-    }\n-\n-    /**\n-     * Convert the multiple {@link URL urls} to a {@link List list} of {@link URL urls}\n-     *\n-     * @param urls the strings presents the {@link URL Dubbo URLs}\n-     * @return non-null\n-     */\n-    static List<URL> toURLs(Iterable<String> urls) {\n-        return stream(urls.spliterator(), false)\n-                .map(URL::valueOf)\n-                .collect(Collectors.toList());\n-    }\n-\n-    /**\n-     * Convert the specified {@link Iterable} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\n-     * the {@link URL URLs}\n-     *\n-     * @param iterable {@link Iterable} of {@link URL}\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\n-     * @see URL#toFullString()\n-     */\n-    static SortedSet<String> toSortedStrings(Iterable<URL> iterable) {\n-        return toSortedStrings(StreamSupport.stream(iterable.spliterator(), false));\n-    }\n-\n-    /**\n-     * Convert the specified {@link Stream} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\n-     * the {@link URL URLs}\n-     *\n-     * @param stream {@link Stream} of {@link URL}\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\n-     * @see URL#toFullString()\n-     */\n-    static SortedSet<String> toSortedStrings(Stream<URL> stream) {\n-        return unmodifiableSortedSet(stream.map(URL::toFullString).collect(TreeSet::new, Set::add, Set::addAll));\n-    }\n-\n-    /**\n-     * Export Metadata in Service Instance of Service Discovery\n-     * <p>\n-     * Used for consumer to get Service Instance Metadata\n-     * if Registry is unsupported with publishing metadata\n-     *\n-     * @param metadata {@link Map} of provider Service Instance Metadata\n-     * @since 3.0\n-     */\n-    default void exportServiceDiscoveryMetadata(String metadata) {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\n-    }\n-\n-    /**\n-     * Get all Metadata listener from local\n-     * <p>\n-     * Used for consumer to get Service Instance Metadata\n-     * if Registry is unsupported with publishing metadata\n-     *\n-     * @return {@link Map} of {@link MetadataChangeListener}\n-     * @since 3.0\n-     */\n-    default Map<String, MetadataChangeListener> getMetadataChangeListenerMap() {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\n-    }\n-\n-    /**\n-     * 1. Fetch Metadata in Service Instance of Service Discovery\n-     * 2. Add a metadata change listener\n-     * <p>\n-     * Used for consumer to get Service Instance Metadata\n-     * if Registry is unsupported with publishing metadata\n-     *\n-     * @param consumerId consumerId\n-     * @param listener   {@link MetadataChangeListener} used to notify event\n-     * @return {@link Map} of provider Service Instance Metadata\n-     * @since 3.0\n-     */\n-    default String getAndListenServiceDiscoveryMetadata(String consumerId, MetadataChangeListener listener) {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.SortedSet;\r\n+import java.util.TreeSet;\r\n+import java.util.stream.Collectors;\r\n+import java.util.stream.Stream;\r\n+import java.util.stream.StreamSupport;\r\n+\r\n+import static java.util.Collections.unmodifiableSortedSet;\r\n+import static java.util.stream.StreamSupport.stream;\r\n+import static org.apache.dubbo.common.URL.buildKey;\r\n+\r\n+/**\r\n+ * A framework interface of Dubbo Metadata Service defines the contract of Dubbo Services registration and subscription\r\n+ * between Dubbo service providers and its consumers. The implementation will be exported as a normal Dubbo service that\r\n+ * the clients would subscribe, whose version comes from the {@link #version()} method and group gets from\r\n+ * {@link #serviceName()}, that means, The different Dubbo service(application) will export the different\r\n+ * {@link MetadataService} that persists all the exported and subscribed metadata, they are present by\r\n+ * {@link #getExportedURLs()} and {@link #getSubscribedURLs()} respectively. What's more, {@link MetadataService}\r\n+ * also providers the fine-grain methods for the precise queries.\r\n+ *\r\n+ * @see WritableMetadataService\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface MetadataService {\r\n+\r\n+    //FIXME the value is default, it was used by testing temporarily\r\n+    static final String DEFAULT_EXTENSION = \"default\";\r\n+\r\n+    /**\r\n+     * The value of all service names\r\n+     */\r\n+    String ALL_SERVICE_NAMES = \"*\";\r\n+\r\n+    /**\r\n+     * The value of All service instances\r\n+     */\r\n+    String ALL_SERVICE_INTERFACES = \"*\";\r\n+\r\n+    /**\r\n+     * The service interface name of {@link MetadataService}\r\n+     */\r\n+    String SERVICE_INTERFACE_NAME = MetadataService.class.getName();\r\n+\r\n+    /**\r\n+     * The contract version of {@link MetadataService}, the future update must make sure compatible.\r\n+     */\r\n+    String VERSION = \"1.0.0\";\r\n+\r\n+    /**\r\n+     * Gets the current Dubbo Service name\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    String serviceName();\r\n+\r\n+    /**\r\n+     * Gets the version of {@link MetadataService} that always equals {@link #VERSION}\r\n+     *\r\n+     * @return non-null\r\n+     * @see #VERSION\r\n+     */\r\n+    default String version() {\r\n+        return VERSION;\r\n+    }\r\n+\r\n+    /**\r\n+     * the list of String that presents all Dubbo subscribed {@link URL urls}\r\n+     *\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getSubscribedURLs() {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents all Dubbo exported {@link URL urls}\r\n+     *\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs() {\r\n+        return getExportedURLs(ALL_SERVICE_INTERFACES);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the <code>serviceInterface</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs(String serviceInterface) {\r\n+        return getExportedURLs(serviceInterface, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\r\n+     * <code>serviceInterface</code> and <code>group</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @param group            the Dubbo Service Group (optional)\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs(String serviceInterface, String group) {\r\n+        return getExportedURLs(serviceInterface, group, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\r\n+     * <code>serviceInterface</code>, <code>group</code> and <code>version</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @param group            the Dubbo Service Group (optional)\r\n+     * @param version          the Dubbo Service Version (optional)\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs(String serviceInterface, String group, String version) {\r\n+        return getExportedURLs(serviceInterface, group, version, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the sorted set of String that presents the specified Dubbo exported {@link URL urls} by the\r\n+     * <code>serviceInterface</code>, <code>group</code>, <code>version</code> and <code>protocol</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @param group            the Dubbo Service Group (optional)\r\n+     * @param version          the Dubbo Service Version (optional)\r\n+     * @param protocol         the Dubbo Service Protocol (optional)\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    SortedSet<String> getExportedURLs(String serviceInterface, String group, String version, String protocol);\r\n+\r\n+    /**\r\n+     * Interface definition.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    default String getServiceDefinition(String interfaceName, String version, String group) {\r\n+        return getServiceDefinition(buildKey(interfaceName, group, version));\r\n+    }\r\n+\r\n+    /**\r\n+     * Interface definition.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    String getServiceDefinition(String serviceKey);\r\n+\r\n+    MetadataInfo getMetadataInfo(String revision);\r\n+\r\n+    Map<String, MetadataInfo> getMetadataInfos();\r\n+\r\n+    /**\r\n+     * Is the {@link URL} for the {@link MetadataService} or not?\r\n+     *\r\n+     * @param url {@link URL url}\r\n+     * @return\r\n+     */\r\n+    static boolean isMetadataServiceURL(URL url) {\r\n+        String serviceInterface = url.getServiceInterface();\r\n+        return SERVICE_INTERFACE_NAME.equals(serviceInterface);\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the multiple {@link URL urls} to a {@link List list} of {@link URL urls}\r\n+     *\r\n+     * @param urls the strings presents the {@link URL Dubbo URLs}\r\n+     * @return non-null\r\n+     */\r\n+    static List<URL> toURLs(Iterable<String> urls) {\r\n+        return stream(urls.spliterator(), false)\r\n+                .map(URL::valueOf)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the specified {@link Iterable} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\r\n+     * the {@link URL URLs}\r\n+     *\r\n+     * @param iterable {@link Iterable} of {@link URL}\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    static SortedSet<String> toSortedStrings(Iterable<URL> iterable) {\r\n+        return toSortedStrings(StreamSupport.stream(iterable.spliterator(), false));\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the specified {@link Stream} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\r\n+     * the {@link URL URLs}\r\n+     *\r\n+     * @param stream {@link Stream} of {@link URL}\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    static SortedSet<String> toSortedStrings(Stream<URL> stream) {\r\n+        return unmodifiableSortedSet(stream.map(URL::toFullString).collect(TreeSet::new, Set::add, Set::addAll));\r\n+    }\r\n+\r\n+    /**\r\n+     * Export Metadata in Service Instance of Service Discovery\r\n+     * <p>\r\n+     * Used for consumer to get Service Instance Metadata\r\n+     * if Registry is unsupported with publishing metadata\r\n+     *\r\n+     * @param metadata {@link Map} of provider Service Instance Metadata\r\n+     * @since 3.0\r\n+     */\r\n+    default void exportServiceDiscoveryMetadata(String metadata) {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all Metadata listener from local\r\n+     * <p>\r\n+     * Used for consumer to get Service Instance Metadata\r\n+     * if Registry is unsupported with publishing metadata\r\n+     *\r\n+     * @return {@link Map} of {@link MetadataChangeListener}\r\n+     * @since 3.0\r\n+     */\r\n+    default Map<String, MetadataChangeListener> getMetadataChangeListenerMap() {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+\r\n+    /**\r\n+     * 1. Fetch Metadata in Service Instance of Service Discovery\r\n+     * 2. Add a metadata change listener\r\n+     * <p>\r\n+     * Used for consumer to get Service Instance Metadata\r\n+     * if Registry is unsupported with publishing metadata\r\n+     *\r\n+     * @param consumerId consumerId\r\n+     * @param listener   {@link MetadataChangeListener} used to notify event\r\n+     * @return {@link Map} of provider Service Instance Metadata\r\n+     * @since 3.0\r\n+     */\r\n+    default String getAndListenServiceDiscoveryMetadata(String consumerId, MetadataChangeListener listener) {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataServiceExporter.java", "source2": "org/apache/dubbo/metadata/MetadataServiceExporter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,100 +1,100 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-import java.util.List;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * The exporter of {@link MetadataService}\n- *\n- * @see MetadataService\n- * @see #export()\n- * @see #unexport()\n- * @since 2.7.5\n- */\n-@SPI(DEFAULT_METADATA_STORAGE_TYPE)\n-public interface MetadataServiceExporter extends Prioritized {\n-\n-    /**\n-     * Exports the {@link MetadataService} as a Dubbo service\n-     *\n-     * @return {@link MetadataServiceExporter itself}\n-     */\n-    MetadataServiceExporter export();\n-\n-    /**\n-     * Unexports the {@link MetadataService}\n-     *\n-     * @return {@link MetadataServiceExporter itself}\n-     */\n-    MetadataServiceExporter unexport();\n-\n-    /**\n-     * Get the {@link URL URLs} that were exported\n-     *\n-     * @return non-null\n-     */\n-    List<URL> getExportedURLs();\n-\n-    /**\n-     * {@link MetadataService} is export or not\n-     *\n-     * @return if {@link #export()} was executed, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean isExported();\n-\n-    /**\n-     * Does current implementation support the specified metadata type?\n-     *\n-     * @param metadataType the specified metadata type\n-     * @return If supports, return <code>true</code>, or <code>false</code>\n-     * @since 2.7.8\n-     */\n-    default boolean supports(String metadataType) {\n-        return true;\n-    }\n-\n-    /**\n-     * Get the extension of {@link MetadataServiceExporter} by the type.\n-     * If not found, return the default implementation\n-     *\n-     * @param metadataType the metadata type\n-     * @return non-null\n-     * @since 2.7.8\n-     */\n-    static MetadataServiceExporter getExtension(String metadataType) {\n-        return getExtensionLoader(MetadataServiceExporter.class).getOrDefaultExtension(metadataType);\n-    }\n-\n-    /**\n-     * Get the default extension of {@link MetadataServiceExporter}\n-     *\n-     * @return non-null\n-     * @since 2.7.8\n-     */\n-    static MetadataServiceExporter getDefaultExtension() {\n-        return getExtension(DEFAULT_METADATA_STORAGE_TYPE);\n-    }\n-}\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+\r\n+import java.util.List;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * The exporter of {@link MetadataService}\r\n+ *\r\n+ * @see MetadataService\r\n+ * @see #export()\r\n+ * @see #unexport()\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI(DEFAULT_METADATA_STORAGE_TYPE)\r\n+public interface MetadataServiceExporter extends Prioritized {\r\n+\r\n+    /**\r\n+     * Exports the {@link MetadataService} as a Dubbo service\r\n+     *\r\n+     * @return {@link MetadataServiceExporter itself}\r\n+     */\r\n+    MetadataServiceExporter export();\r\n+\r\n+    /**\r\n+     * Unexports the {@link MetadataService}\r\n+     *\r\n+     * @return {@link MetadataServiceExporter itself}\r\n+     */\r\n+    MetadataServiceExporter unexport();\r\n+\r\n+    /**\r\n+     * Get the {@link URL URLs} that were exported\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    List<URL> getExportedURLs();\r\n+\r\n+    /**\r\n+     * {@link MetadataService} is export or not\r\n+     *\r\n+     * @return if {@link #export()} was executed, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean isExported();\r\n+\r\n+    /**\r\n+     * Does current implementation support the specified metadata type?\r\n+     *\r\n+     * @param metadataType the specified metadata type\r\n+     * @return If supports, return <code>true</code>, or <code>false</code>\r\n+     * @since 2.7.8\r\n+     */\r\n+    default boolean supports(String metadataType) {\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the extension of {@link MetadataServiceExporter} by the type.\r\n+     * If not found, return the default implementation\r\n+     *\r\n+     * @param metadataType the metadata type\r\n+     * @return non-null\r\n+     * @since 2.7.8\r\n+     */\r\n+    static MetadataServiceExporter getExtension(String metadataType) {\r\n+        return getExtensionLoader(MetadataServiceExporter.class).getOrDefaultExtension(metadataType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the default extension of {@link MetadataServiceExporter}\r\n+     *\r\n+     * @return non-null\r\n+     * @since 2.7.8\r\n+     */\r\n+    static MetadataServiceExporter getDefaultExtension() {\r\n+        return getExtension(DEFAULT_METADATA_STORAGE_TYPE);\r\n+    }\r\n+}\r\n+\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataServiceType.java", "source2": "org/apache/dubbo/metadata/MetadataServiceType.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,72 +1,72 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\n-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;\n-\n-/**\n- * The type enumerations of {@link MetadataService}\n- *\n- * @see MetadataService\n- * @since 2.7.8\n- */\n-public enum MetadataServiceType {\n-\n-    /**\n-     * The default type of {@link MetadataService}\n-     */\n-    DEFAULT(DEFAULT_METADATA_STORAGE_TYPE),\n-\n-    /**\n-     * The remote type of {@link MetadataService}\n-     */\n-    REMOTE(REMOTE_METADATA_STORAGE_TYPE),\n-\n-    /**\n-     * The composite type of {@link MetadataService}\n-     */\n-    COMPOSITE(COMPOSITE_METADATA_STORAGE_TYPE);\n-\n-    /**\n-     * The {@link String} value of type\n-     */\n-    private final String value;\n-\n-    MetadataServiceType(String value) {\n-        this.value = value;\n-    }\n-\n-    public String getValue() {\n-        return value;\n-    }\n-\n-    public static MetadataServiceType getOrDefault(String value) {\n-        MetadataServiceType targetType = null;\n-        for (MetadataServiceType type : values()) {\n-            if (type.getValue().equals(value)) {\n-                targetType = type;\n-                break;\n-            }\n-        }\n-        if (targetType == null) {\n-            targetType = DEFAULT;\n-        }\n-        return targetType;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;\r\n+\r\n+/**\r\n+ * The type enumerations of {@link MetadataService}\r\n+ *\r\n+ * @see MetadataService\r\n+ * @since 2.7.8\r\n+ */\r\n+public enum MetadataServiceType {\r\n+\r\n+    /**\r\n+     * The default type of {@link MetadataService}\r\n+     */\r\n+    DEFAULT(DEFAULT_METADATA_STORAGE_TYPE),\r\n+\r\n+    /**\r\n+     * The remote type of {@link MetadataService}\r\n+     */\r\n+    REMOTE(REMOTE_METADATA_STORAGE_TYPE),\r\n+\r\n+    /**\r\n+     * The composite type of {@link MetadataService}\r\n+     */\r\n+    COMPOSITE(COMPOSITE_METADATA_STORAGE_TYPE);\r\n+\r\n+    /**\r\n+     * The {@link String} value of type\r\n+     */\r\n+    private final String value;\r\n+\r\n+    MetadataServiceType(String value) {\r\n+        this.value = value;\r\n+    }\r\n+\r\n+    public String getValue() {\r\n+        return value;\r\n+    }\r\n+\r\n+    public static MetadataServiceType getOrDefault(String value) {\r\n+        MetadataServiceType targetType = null;\r\n+        for (MetadataServiceType type : values()) {\r\n+            if (type.getValue().equals(value)) {\r\n+                targetType = type;\r\n+                break;\r\n+            }\r\n+        }\r\n+        if (targetType == null) {\r\n+            targetType = DEFAULT;\r\n+        }\r\n+        return targetType;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/RevisionResolver.java", "source2": "org/apache/dubbo/metadata/RevisionResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,59 +1,59 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-import java.security.MessageDigest;\n-import java.security.NoSuchAlgorithmException;\n-\n-import static java.nio.charset.StandardCharsets.UTF_8;\n-\n-public class RevisionResolver {\n-    private static final Logger logger = LoggerFactory.getLogger(RevisionResolver.class);\n-    private static char hexDigits[] = {\n-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'\n-    };\n-\n-    private static MessageDigest mdInst;\n-\n-    static {\n-        try {\n-            mdInst = MessageDigest.getInstance(\"MD5\");\n-        } catch (NoSuchAlgorithmException e) {\n-            logger.error(\"Failed to calculate metadata revision\", e);\n-        }\n-    }\n-\n-    public static String calRevision(String metadata) {\n-        mdInst.update(metadata.getBytes(UTF_8));\n-        byte[] md5 = mdInst.digest();\n-\n-        int j = md5.length;\n-        char str[] = new char[j * 2];\n-        int k = 0;\n-        for (int i = 0; i < j; i++) {\n-            byte byte0 = md5[i];\n-            str[k++] = hexDigits[byte0 >>> 4 & 0xf];\n-            str[k++] = hexDigits[byte0 & 0xf];\n-        }\n-        return new String(str);\n-    }\n-\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+\r\n+import java.security.MessageDigest;\r\n+import java.security.NoSuchAlgorithmException;\r\n+\r\n+import static java.nio.charset.StandardCharsets.UTF_8;\r\n+\r\n+public class RevisionResolver {\r\n+    private static final Logger logger = LoggerFactory.getLogger(RevisionResolver.class);\r\n+    private static char hexDigits[] = {\r\n+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'\r\n+    };\r\n+\r\n+    private static MessageDigest mdInst;\r\n+\r\n+    static {\r\n+        try {\r\n+            mdInst = MessageDigest.getInstance(\"MD5\");\r\n+        } catch (NoSuchAlgorithmException e) {\r\n+            logger.error(\"Failed to calculate metadata revision\", e);\r\n+        }\r\n+    }\r\n+\r\n+    public static String calRevision(String metadata) {\r\n+        mdInst.update(metadata.getBytes(UTF_8));\r\n+        byte[] md5 = mdInst.digest();\r\n+\r\n+        int j = md5.length;\r\n+        char str[] = new char[j * 2];\r\n+        int k = 0;\r\n+        for (int i = 0; i < j; i++) {\r\n+            byte byte0 = md5[i];\r\n+            str[k++] = hexDigits[byte0 >>> 4 & 0xf];\r\n+            str[k++] = hexDigits[byte0 & 0xf];\r\n+        }\r\n+        return new String(str);\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/ServiceNameMapping.java", "source2": "org/apache/dubbo/metadata/ServiceNameMapping.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,72 +1,72 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.Set;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_MAPPING_TYPE;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.common.utils.StringUtils.SLASH;\n-import static org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.DEFAULT_MAPPING_GROUP;\n-\n-/**\n- * The interface for Dubbo service name Mapping\n- *\n- * @since 2.7.5\n- */\n-@SPI(\"config\")\n-public interface ServiceNameMapping {\n-\n-    /**\n-     * Map the specified Dubbo service interface, group, version and protocol to current Dubbo service name\n-     */\n-    void map(URL url);\n-\n-    /**\n-     * Get the service names from the specified Dubbo service interface, group, version and protocol\n-     *\n-     * @return\n-     */\n-    Set<String> getAndListen(URL url, MappingListener mappingListener);\n-\n-    /**\n-     * Get the default extension of {@link ServiceNameMapping}\n-     *\n-     * @return non-null {@link ServiceNameMapping}\n-     * @see DynamicConfigurationServiceNameMapping\n-     */\n-    static ServiceNameMapping getDefaultExtension() {\n-        return getExtensionLoader(ServiceNameMapping.class).getDefaultExtension();\n-    }\n-\n-    static ServiceNameMapping getExtension(String name) {\n-        return getExtensionLoader(ServiceNameMapping.class).getExtension(name == null ? CONFIG_MAPPING_TYPE : name);\n-    }\n-\n-    static String buildGroup(String serviceInterface, String group, String version, String protocol) {\n-        //        the issue : https://github.com/apache/dubbo/issues/4671\n-        //        StringBuilder groupBuilder = new StringBuilder(serviceInterface)\n-        //                .append(KEY_SEPARATOR).append(defaultString(group))\n-        //                .append(KEY_SEPARATOR).append(defaultString(version))\n-        //                .append(KEY_SEPARATOR).append(defaultString(protocol));\n-        //        return groupBuilder.toString();\n-        return DEFAULT_MAPPING_GROUP + SLASH + serviceInterface;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.Set;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_MAPPING_TYPE;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.common.utils.StringUtils.SLASH;\r\n+import static org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.DEFAULT_MAPPING_GROUP;\r\n+\r\n+/**\r\n+ * The interface for Dubbo service name Mapping\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI(\"config\")\r\n+public interface ServiceNameMapping {\r\n+\r\n+    /**\r\n+     * Map the specified Dubbo service interface, group, version and protocol to current Dubbo service name\r\n+     */\r\n+    void map(URL url);\r\n+\r\n+    /**\r\n+     * Get the service names from the specified Dubbo service interface, group, version and protocol\r\n+     *\r\n+     * @return\r\n+     */\r\n+    Set<String> getAndListen(URL url, MappingListener mappingListener);\r\n+\r\n+    /**\r\n+     * Get the default extension of {@link ServiceNameMapping}\r\n+     *\r\n+     * @return non-null {@link ServiceNameMapping}\r\n+     * @see DynamicConfigurationServiceNameMapping\r\n+     */\r\n+    static ServiceNameMapping getDefaultExtension() {\r\n+        return getExtensionLoader(ServiceNameMapping.class).getDefaultExtension();\r\n+    }\r\n+\r\n+    static ServiceNameMapping getExtension(String name) {\r\n+        return getExtensionLoader(ServiceNameMapping.class).getExtension(name == null ? CONFIG_MAPPING_TYPE : name);\r\n+    }\r\n+\r\n+    static String buildGroup(String serviceInterface, String group, String version, String protocol) {\r\n+        //        the issue : https://github.com/apache/dubbo/issues/4671\r\n+        //        StringBuilder groupBuilder = new StringBuilder(serviceInterface)\r\n+        //                .append(KEY_SEPARATOR).append(defaultString(group))\r\n+        //                .append(KEY_SEPARATOR).append(defaultString(version))\r\n+        //                .append(KEY_SEPARATOR).append(defaultString(protocol));\r\n+        //        return groupBuilder.toString();\r\n+        return DEFAULT_MAPPING_GROUP + SLASH + serviceInterface;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/WritableMetadataService.java", "source2": "org/apache/dubbo/metadata/WritableMetadataService.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,87 +1,87 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * Local {@link MetadataService} that extends {@link MetadataService} and provides the modification, which is used for\n- * Dubbo's consumers and providers.\n- *\n- * @since 2.7.5\n- */\n-@SPI(\"default\")\n-public interface WritableMetadataService extends MetadataService {\n-    /**\n-     * Gets the current Dubbo Service name\n-     *\n-     * @return non-null\n-     */\n-    @Override\n-    default String serviceName() {\n-        return ApplicationModel.getApplication();\n-    }\n-\n-    /**\n-     * Exports a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean exportURL(URL url);\n-\n-    /**\n-     * Unexports a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean unexportURL(URL url);\n-\n-    /**\n-     * Subscribes a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean subscribeURL(URL url);\n-\n-    /**\n-     * Unsubscribes a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean unsubscribeURL(URL url);\n-\n-    void publishServiceDefinition(URL providerUrl);\n-\n-\n-    /**\n-     * Get {@link ExtensionLoader#getDefaultExtension() the defautl extension} of {@link WritableMetadataService}\n-     *\n-     * @return non-null\n-     */\n-    static WritableMetadataService getDefaultExtension() {\n-        return getExtensionLoader(WritableMetadataService.class).getDefaultExtension();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * Local {@link MetadataService} that extends {@link MetadataService} and provides the modification, which is used for\r\n+ * Dubbo's consumers and providers.\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI(\"default\")\r\n+public interface WritableMetadataService extends MetadataService {\r\n+    /**\r\n+     * Gets the current Dubbo Service name\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    @Override\r\n+    default String serviceName() {\r\n+        return ApplicationModel.getApplication();\r\n+    }\r\n+\r\n+    /**\r\n+     * Exports a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean exportURL(URL url);\r\n+\r\n+    /**\r\n+     * Unexports a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean unexportURL(URL url);\r\n+\r\n+    /**\r\n+     * Subscribes a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean subscribeURL(URL url);\r\n+\r\n+    /**\r\n+     * Unsubscribes a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean unsubscribeURL(URL url);\r\n+\r\n+    void publishServiceDefinition(URL providerUrl);\r\n+\r\n+\r\n+    /**\r\n+     * Get {@link ExtensionLoader#getDefaultExtension() the defautl extension} of {@link WritableMetadataService}\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    static WritableMetadataService getDefaultExtension() {\r\n+        return getExtensionLoader(WritableMetadataService.class).getDefaultExtension();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,78 +1,78 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition;\n-\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.ArrayList;\n-import java.util.List;\n-\n-/**\n- * {@link MethodDefinition} Builder based on Java Reflection\n- *\n- * @since 2.7.6\n- */\n-public class MethodDefinitionBuilder {\n-\n-    private final TypeDefinitionBuilder builder;\n-\n-    public MethodDefinitionBuilder(TypeDefinitionBuilder builder) {\n-        this.builder = builder;\n-    }\n-\n-    public MethodDefinitionBuilder() {\n-        this.builder = new TypeDefinitionBuilder();\n-    }\n-\n-    /**\n-     * Build the instance of {@link MethodDefinition}\n-     *\n-     * @param method {@link Method}\n-     * @return non-null\n-     */\n-    public MethodDefinition build(Method method) {\n-\n-        MethodDefinition md = new MethodDefinition();\n-        md.setName(method.getName());\n-\n-        // Process the parameters\n-        Class<?>[] paramTypes = method.getParameterTypes();\n-        Type[] genericParamTypes = method.getGenericParameterTypes();\n-\n-        int paramSize = paramTypes.length;\n-        String[] parameterTypes = new String[paramSize];\n-        List<TypeDefinition> parameters = new ArrayList<>(paramSize);\n-        for (int i = 0; i < paramSize; i++) {\n-            TypeDefinition parameter = builder.build(genericParamTypes[i], paramTypes[i]);\n-            parameterTypes[i] = parameter.getType();\n-            parameters.add(parameter);\n-        }\n-\n-        md.setParameterTypes(parameterTypes);\n-        md.setParameters(parameters);\n-\n-        // Process return type.\n-        TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\n-        md.setReturnType(td.getType());\n-\n-        return md;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * {@link MethodDefinition} Builder based on Java Reflection\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MethodDefinitionBuilder {\r\n+\r\n+    private final TypeDefinitionBuilder builder;\r\n+\r\n+    public MethodDefinitionBuilder(TypeDefinitionBuilder builder) {\r\n+        this.builder = builder;\r\n+    }\r\n+\r\n+    public MethodDefinitionBuilder() {\r\n+        this.builder = new TypeDefinitionBuilder();\r\n+    }\r\n+\r\n+    /**\r\n+     * Build the instance of {@link MethodDefinition}\r\n+     *\r\n+     * @param method {@link Method}\r\n+     * @return non-null\r\n+     */\r\n+    public MethodDefinition build(Method method) {\r\n+\r\n+        MethodDefinition md = new MethodDefinition();\r\n+        md.setName(method.getName());\r\n+\r\n+        // Process the parameters\r\n+        Class<?>[] paramTypes = method.getParameterTypes();\r\n+        Type[] genericParamTypes = method.getGenericParameterTypes();\r\n+\r\n+        int paramSize = paramTypes.length;\r\n+        String[] parameterTypes = new String[paramSize];\r\n+        List<TypeDefinition> parameters = new ArrayList<>(paramSize);\r\n+        for (int i = 0; i < paramSize; i++) {\r\n+            TypeDefinition parameter = builder.build(genericParamTypes[i], paramTypes[i]);\r\n+            parameterTypes[i] = parameter.getType();\r\n+            parameters.add(parameter);\r\n+        }\r\n+\r\n+        md.setParameterTypes(parameterTypes);\r\n+        md.setParameters(parameters);\r\n+\r\n+        // Process return type.\r\n+        TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\r\n+        md.setReturnType(td.getType());\r\n+\r\n+        return md;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,107 +1,107 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition;\n-\n-import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-import org.apache.dubbo.metadata.definition.util.ClassUtils;\n-\n-import com.google.gson.Gson;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.List;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public final class ServiceDefinitionBuilder {\n-\n-    /**\n-     * Describe a Java interface in {@link ServiceDefinition}.\n-     *\n-     * @return Service description\n-     */\n-    public static ServiceDefinition build(final Class<?> interfaceClass) {\n-        ServiceDefinition sd = new ServiceDefinition();\n-        build(sd, interfaceClass);\n-        return sd;\n-    }\n-\n-    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass) {\n-        FullServiceDefinition sd = new FullServiceDefinition();\n-        build(sd, interfaceClass);\n-        return sd;\n-    }\n-\n-    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass, Map<String, String> params) {\n-        FullServiceDefinition sd = new FullServiceDefinition();\n-        build(sd, interfaceClass);\n-        sd.setParameters(params);\n-        return sd;\n-    }\n-\n-    public static <T extends ServiceDefinition> void build(T sd, final Class<?> interfaceClass) {\n-        sd.setCanonicalName(interfaceClass.getCanonicalName());\n-        sd.setCodeSource(ClassUtils.getCodeSource(interfaceClass));\n-\n-        TypeDefinitionBuilder builder = new TypeDefinitionBuilder();\n-        List<Method> methods = ClassUtils.getPublicNonStaticMethods(interfaceClass);\n-        for (Method method : methods) {\n-            MethodDefinition md = new MethodDefinition();\n-            md.setName(method.getName());\n-\n-            // Process parameter types.\n-            Class<?>[] paramTypes = method.getParameterTypes();\n-            Type[] genericParamTypes = method.getGenericParameterTypes();\n-\n-            String[] parameterTypes = new String[paramTypes.length];\n-            for (int i = 0; i < paramTypes.length; i++) {\n-                TypeDefinition td = builder.build(genericParamTypes[i], paramTypes[i]);\n-                parameterTypes[i] = td.getType();\n-            }\n-            md.setParameterTypes(parameterTypes);\n-\n-            // Process return type.\n-            TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\n-            md.setReturnType(td.getType());\n-\n-            sd.getMethods().add(md);\n-        }\n-\n-        sd.setTypes(builder.getTypeDefinitions());\n-    }\n-\n-    /**\n-     * Describe a Java interface in Json schema.\n-     *\n-     * @return Service description\n-     */\n-    public static String schema(final Class<?> clazz) {\n-        ServiceDefinition sd = build(clazz);\n-        Gson gson = new Gson();\n-        return gson.toJson(sd);\n-    }\n-\n-    private ServiceDefinitionBuilder() {\n-    }\n-}\n-\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+import org.apache.dubbo.metadata.definition.util.ClassUtils;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public final class ServiceDefinitionBuilder {\r\n+\r\n+    /**\r\n+     * Describe a Java interface in {@link ServiceDefinition}.\r\n+     *\r\n+     * @return Service description\r\n+     */\r\n+    public static ServiceDefinition build(final Class<?> interfaceClass) {\r\n+        ServiceDefinition sd = new ServiceDefinition();\r\n+        build(sd, interfaceClass);\r\n+        return sd;\r\n+    }\r\n+\r\n+    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass) {\r\n+        FullServiceDefinition sd = new FullServiceDefinition();\r\n+        build(sd, interfaceClass);\r\n+        return sd;\r\n+    }\r\n+\r\n+    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass, Map<String, String> params) {\r\n+        FullServiceDefinition sd = new FullServiceDefinition();\r\n+        build(sd, interfaceClass);\r\n+        sd.setParameters(params);\r\n+        return sd;\r\n+    }\r\n+\r\n+    public static <T extends ServiceDefinition> void build(T sd, final Class<?> interfaceClass) {\r\n+        sd.setCanonicalName(interfaceClass.getCanonicalName());\r\n+        sd.setCodeSource(ClassUtils.getCodeSource(interfaceClass));\r\n+\r\n+        TypeDefinitionBuilder builder = new TypeDefinitionBuilder();\r\n+        List<Method> methods = ClassUtils.getPublicNonStaticMethods(interfaceClass);\r\n+        for (Method method : methods) {\r\n+            MethodDefinition md = new MethodDefinition();\r\n+            md.setName(method.getName());\r\n+\r\n+            // Process parameter types.\r\n+            Class<?>[] paramTypes = method.getParameterTypes();\r\n+            Type[] genericParamTypes = method.getGenericParameterTypes();\r\n+\r\n+            String[] parameterTypes = new String[paramTypes.length];\r\n+            for (int i = 0; i < paramTypes.length; i++) {\r\n+                TypeDefinition td = builder.build(genericParamTypes[i], paramTypes[i]);\r\n+                parameterTypes[i] = td.getType();\r\n+            }\r\n+            md.setParameterTypes(parameterTypes);\r\n+\r\n+            // Process return type.\r\n+            TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\r\n+            md.setReturnType(td.getType());\r\n+\r\n+            sd.getMethods().add(md);\r\n+        }\r\n+\r\n+        sd.setTypes(builder.getTypeDefinitions());\r\n+    }\r\n+\r\n+    /**\r\n+     * Describe a Java interface in Json schema.\r\n+     *\r\n+     * @return Service description\r\n+     */\r\n+    public static String schema(final Class<?> clazz) {\r\n+        ServiceDefinition sd = build(clazz);\r\n+        Gson gson = new Gson();\r\n+        return gson.toJson(sd);\r\n+    }\r\n+\r\n+    private ServiceDefinitionBuilder() {\r\n+    }\r\n+}\r\n+\r\n+\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,88 +1,88 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder;\n-import org.apache.dubbo.metadata.definition.builder.TypeBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Type;\n-import java.util.ArrayList;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-import static org.apache.dubbo.common.utils.ClassUtils.isSimpleType;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class TypeDefinitionBuilder {\n-    private static final Logger logger = LoggerFactory.getLogger(TypeDefinitionBuilder.class);\n-    static final List<TypeBuilder> BUILDERS;\n-\n-    static {\n-        ExtensionLoader<TypeBuilder> extensionLoader = ExtensionLoader.getExtensionLoader(TypeBuilder.class);\n-        Set<TypeBuilder> tbs = extensionLoader.getSupportedExtensionInstances();\n-        BUILDERS = new ArrayList<>(tbs);\n-    }\n-\n-    public static TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        TypeBuilder builder = getGenericTypeBuilder(type, clazz);\n-        TypeDefinition td;\n-        if (builder != null) {\n-            td = builder.build(type, clazz, typeCache);\n-            td.setTypeBuilderName(builder.getClass().getName());\n-        } else {\n-            td = DefaultTypeBuilder.build(clazz, typeCache);\n-            td.setTypeBuilderName(DefaultTypeBuilder.class.getName());\n-        }\n-        if (isSimpleType(clazz)) { // changed since 2.7.6\n-            td.setProperties(null);\n-        }\n-        return td;\n-    }\n-\n-    private static TypeBuilder getGenericTypeBuilder(Type type, Class<?> clazz) {\n-        for (TypeBuilder builder : BUILDERS) {\n-            try {\n-                if (builder.accept(type, clazz)) {\n-                    return builder;\n-                }\n-            } catch (NoClassDefFoundError cnfe) {\n-                //ignore\n-                logger.info(\"Throw classNotFound (\" + cnfe.getMessage() + \") in \" + builder.getClass());\n-            }\n-        }\n-        return null;\n-    }\n-\n-    private Map<Class<?>, TypeDefinition> typeCache = new HashMap<>();\n-\n-    public TypeDefinition build(Type type, Class<?> clazz) {\n-        return build(type, clazz, typeCache);\n-    }\n-\n-    public List<TypeDefinition> getTypeDefinitions() {\n-        return new ArrayList<>(typeCache.values());\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder;\r\n+import org.apache.dubbo.metadata.definition.builder.TypeBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Type;\r\n+import java.util.ArrayList;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+import static org.apache.dubbo.common.utils.ClassUtils.isSimpleType;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class TypeDefinitionBuilder {\r\n+    private static final Logger logger = LoggerFactory.getLogger(TypeDefinitionBuilder.class);\r\n+    static final List<TypeBuilder> BUILDERS;\r\n+\r\n+    static {\r\n+        ExtensionLoader<TypeBuilder> extensionLoader = ExtensionLoader.getExtensionLoader(TypeBuilder.class);\r\n+        Set<TypeBuilder> tbs = extensionLoader.getSupportedExtensionInstances();\r\n+        BUILDERS = new ArrayList<>(tbs);\r\n+    }\r\n+\r\n+    public static TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        TypeBuilder builder = getGenericTypeBuilder(type, clazz);\r\n+        TypeDefinition td;\r\n+        if (builder != null) {\r\n+            td = builder.build(type, clazz, typeCache);\r\n+            td.setTypeBuilderName(builder.getClass().getName());\r\n+        } else {\r\n+            td = DefaultTypeBuilder.build(clazz, typeCache);\r\n+            td.setTypeBuilderName(DefaultTypeBuilder.class.getName());\r\n+        }\r\n+        if (isSimpleType(clazz)) { // changed since 2.7.6\r\n+            td.setProperties(null);\r\n+        }\r\n+        return td;\r\n+    }\r\n+\r\n+    private static TypeBuilder getGenericTypeBuilder(Type type, Class<?> clazz) {\r\n+        for (TypeBuilder builder : BUILDERS) {\r\n+            try {\r\n+                if (builder.accept(type, clazz)) {\r\n+                    return builder;\r\n+                }\r\n+            } catch (NoClassDefFoundError cnfe) {\r\n+                //ignore\r\n+                logger.info(\"Throw classNotFound (\" + cnfe.getMessage() + \") in \" + builder.getClass());\r\n+            }\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    private Map<Class<?>, TypeDefinition> typeCache = new HashMap<>();\r\n+\r\n+    public TypeDefinition build(Type type, Class<?> clazz) {\r\n+        return build(type, clazz, typeCache);\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getTypeDefinitions() {\r\n+        return new ArrayList<>(typeCache.values());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,48 +1,48 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Type;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class ArrayTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return clazz.isArray();\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        // Process the component type of an array.\n-        Class<?> componentType = clazz.getComponentType();\n-        TypeDefinitionBuilder.build(componentType, componentType, typeCache);\n-\n-        final String canonicalName = clazz.getCanonicalName();\n-        return new TypeDefinition(canonicalName);\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Type;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class ArrayTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return clazz.isArray();\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        // Process the component type of an array.\r\n+        Class<?> componentType = clazz.getComponentType();\r\n+        TypeDefinitionBuilder.build(componentType, componentType, typeCache);\r\n+\r\n+        final String canonicalName = clazz.getCanonicalName();\r\n+        return new TypeDefinition(canonicalName);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,70 +1,70 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.ParameterizedType;\n-import java.lang.reflect.Type;\n-import java.text.MessageFormat;\n-import java.util.Arrays;\n-import java.util.Collection;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class CollectionTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return Collection.class.isAssignableFrom(clazz);\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        if (!(type instanceof ParameterizedType)) {\n-            return new TypeDefinition(clazz.getName());\n-        }\n-\n-        ParameterizedType parameterizedType = (ParameterizedType) type;\n-        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\n-        if (actualTypeArgs == null || actualTypeArgs.length != 1) {\n-            throw new IllegalArgumentException(MessageFormat.format(\n-                    \"[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}].\"\n-                            + Arrays.toString(actualTypeArgs),\n-                    type, actualTypeArgs));\n-        }\n-\n-        Type actualType = actualTypeArgs[0];\n-        if (actualType instanceof ParameterizedType) {\n-            // Nested collection or map.\n-            Class<?> rawType = (Class<?>) ((ParameterizedType) actualType).getRawType();\n-            TypeDefinitionBuilder.build(actualType, rawType, typeCache);\n-        } else if (actualType instanceof Class<?>) {\n-            Class<?> actualClass = (Class<?>) actualType;\n-            TypeDefinitionBuilder.build(null, actualClass, typeCache);\n-        }\n-\n-        return new TypeDefinition(type.toString());\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.lang.reflect.Type;\r\n+import java.text.MessageFormat;\r\n+import java.util.Arrays;\r\n+import java.util.Collection;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class CollectionTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return Collection.class.isAssignableFrom(clazz);\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        if (!(type instanceof ParameterizedType)) {\r\n+            return new TypeDefinition(clazz.getName());\r\n+        }\r\n+\r\n+        ParameterizedType parameterizedType = (ParameterizedType) type;\r\n+        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\r\n+        if (actualTypeArgs == null || actualTypeArgs.length != 1) {\r\n+            throw new IllegalArgumentException(MessageFormat.format(\r\n+                    \"[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}].\"\r\n+                            + Arrays.toString(actualTypeArgs),\r\n+                    type, actualTypeArgs));\r\n+        }\r\n+\r\n+        Type actualType = actualTypeArgs[0];\r\n+        if (actualType instanceof ParameterizedType) {\r\n+            // Nested collection or map.\r\n+            Class<?> rawType = (Class<?>) ((ParameterizedType) actualType).getRawType();\r\n+            TypeDefinitionBuilder.build(actualType, rawType, typeCache);\r\n+        } else if (actualType instanceof Class<?>) {\r\n+            Class<?> actualClass = (Class<?>) actualType;\r\n+            TypeDefinitionBuilder.build(null, actualClass, typeCache);\r\n+        }\r\n+\r\n+        return new TypeDefinition(type.toString());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,70 +1,70 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-import org.apache.dubbo.metadata.definition.util.ClassUtils;\n-import org.apache.dubbo.metadata.definition.util.JaketConfigurationUtils;\n-\n-import java.lang.reflect.Field;\n-import java.lang.reflect.Type;\n-import java.util.List;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public final class DefaultTypeBuilder {\n-\n-    public static TypeDefinition build(Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-//        final String canonicalName = clazz.getCanonicalName();\n-        final String name = clazz.getName();\n-\n-        TypeDefinition td = new TypeDefinition(name);\n-        // Try to get a cached definition\n-        if (typeCache.containsKey(clazz)) {\n-            return typeCache.get(clazz);\n-        }\n-\n-        // Primitive type\n-        if (!JaketConfigurationUtils.needAnalyzing(clazz)) {\n-            return td;\n-        }\n-\n-        // Custom type\n-        TypeDefinition ref = new TypeDefinition(name);\n-        ref.set$ref(name);\n-        typeCache.put(clazz, ref);\n-\n-        List<Field> fields = ClassUtils.getNonStaticFields(clazz);\n-        for (Field field : fields) {\n-            String fieldName = field.getName();\n-            Class<?> fieldClass = field.getType();\n-            Type fieldType = field.getGenericType();\n-\n-            TypeDefinition fieldTd = TypeDefinitionBuilder.build(fieldType, fieldClass, typeCache);\n-            td.getProperties().put(fieldName, fieldTd);\n-        }\n-\n-        typeCache.put(clazz, td);\n-        return td;\n-    }\n-\n-    private DefaultTypeBuilder() {\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+import org.apache.dubbo.metadata.definition.util.ClassUtils;\r\n+import org.apache.dubbo.metadata.definition.util.JaketConfigurationUtils;\r\n+\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.Type;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public final class DefaultTypeBuilder {\r\n+\r\n+    public static TypeDefinition build(Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+//        final String canonicalName = clazz.getCanonicalName();\r\n+        final String name = clazz.getName();\r\n+\r\n+        TypeDefinition td = new TypeDefinition(name);\r\n+        // Try to get a cached definition\r\n+        if (typeCache.containsKey(clazz)) {\r\n+            return typeCache.get(clazz);\r\n+        }\r\n+\r\n+        // Primitive type\r\n+        if (!JaketConfigurationUtils.needAnalyzing(clazz)) {\r\n+            return td;\r\n+        }\r\n+\r\n+        // Custom type\r\n+        TypeDefinition ref = new TypeDefinition(name);\r\n+        ref.set$ref(name);\r\n+        typeCache.put(clazz, ref);\r\n+\r\n+        List<Field> fields = ClassUtils.getNonStaticFields(clazz);\r\n+        for (Field field : fields) {\r\n+            String fieldName = field.getName();\r\n+            Class<?> fieldClass = field.getType();\r\n+            Type fieldType = field.getGenericType();\r\n+\r\n+            TypeDefinition fieldTd = TypeDefinitionBuilder.build(fieldType, fieldClass, typeCache);\r\n+            td.getProperties().put(fieldName, fieldTd);\r\n+        }\r\n+\r\n+        typeCache.put(clazz, td);\r\n+        return td;\r\n+    }\r\n+\r\n+    private DefaultTypeBuilder() {\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,58 +1,58 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class EnumTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return clazz.isEnum();\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        TypeDefinition td = new TypeDefinition(clazz.getCanonicalName());\n-\n-        try {\n-            Method methodValues = clazz.getDeclaredMethod(\"values\");\n-            Object[] values = (Object[]) methodValues.invoke(clazz, new Object[0]);\n-            int length = values.length;\n-            for (int i = 0; i < length; i++) {\n-                Object value = values[i];\n-                td.getEnums().add(value.toString());\n-            }\n-        } catch (Throwable t) {\n-            td.setId(\"-1\");\n-        }\n-\n-        typeCache.put(clazz, td);\n-        return td;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class EnumTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return clazz.isEnum();\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        TypeDefinition td = new TypeDefinition(clazz.getCanonicalName());\r\n+\r\n+        try {\r\n+            Method methodValues = clazz.getDeclaredMethod(\"values\");\r\n+            Object[] values = (Object[]) methodValues.invoke(clazz, new Object[0]);\r\n+            int length = values.length;\r\n+            for (int i = 0; i < length; i++) {\r\n+                Object value = values[i];\r\n+                td.getEnums().add(value.toString());\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            td.setId(\"-1\");\r\n+        }\r\n+\r\n+        typeCache.put(clazz, td);\r\n+        return td;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,80 +1,80 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.ParameterizedType;\n-import java.lang.reflect.Type;\n-import java.text.MessageFormat;\n-import java.util.Arrays;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.utils.TypeUtils.getRawClass;\n-import static org.apache.dubbo.common.utils.TypeUtils.isClass;\n-import static org.apache.dubbo.common.utils.TypeUtils.isParameterizedType;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class MapTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return Map.class.isAssignableFrom(clazz);\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        if (!(type instanceof ParameterizedType)) {\n-            return new TypeDefinition(clazz.getName());\n-        }\n-\n-        ParameterizedType parameterizedType = (ParameterizedType) type;\n-        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\n-        int actualTypeArgsLength = actualTypeArgs == null ? 0 : actualTypeArgs.length;\n-\n-        if (actualTypeArgsLength != 2) {\n-            throw new IllegalArgumentException(MessageFormat.format(\n-                    \"[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}].\"\n-                            + Arrays.toString(actualTypeArgs), type, actualTypeArgs));\n-        }\n-\n-        String mapType = type.toString();\n-\n-        TypeDefinition typeDefinition = new TypeDefinition(mapType);\n-\n-        for (int i = 0; i < actualTypeArgsLength; i++) {\n-            Type actualType = actualTypeArgs[i];\n-            TypeDefinition item = null;\n-            Class<?> rawType = getRawClass(actualType);\n-            if (isParameterizedType(actualType)) {\n-                // Nested collection or map.\n-                item = TypeDefinitionBuilder.build(actualType, rawType, typeCache);\n-            } else if (isClass(actualType)) {\n-                item = TypeDefinitionBuilder.build(null, rawType, typeCache);\n-            }\n-            typeDefinition.getItems().add(item);\n-        }\n-\n-        return typeDefinition;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.lang.reflect.Type;\r\n+import java.text.MessageFormat;\r\n+import java.util.Arrays;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.utils.TypeUtils.getRawClass;\r\n+import static org.apache.dubbo.common.utils.TypeUtils.isClass;\r\n+import static org.apache.dubbo.common.utils.TypeUtils.isParameterizedType;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class MapTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return Map.class.isAssignableFrom(clazz);\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        if (!(type instanceof ParameterizedType)) {\r\n+            return new TypeDefinition(clazz.getName());\r\n+        }\r\n+\r\n+        ParameterizedType parameterizedType = (ParameterizedType) type;\r\n+        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\r\n+        int actualTypeArgsLength = actualTypeArgs == null ? 0 : actualTypeArgs.length;\r\n+\r\n+        if (actualTypeArgsLength != 2) {\r\n+            throw new IllegalArgumentException(MessageFormat.format(\r\n+                    \"[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}].\"\r\n+                            + Arrays.toString(actualTypeArgs), type, actualTypeArgs));\r\n+        }\r\n+\r\n+        String mapType = type.toString();\r\n+\r\n+        TypeDefinition typeDefinition = new TypeDefinition(mapType);\r\n+\r\n+        for (int i = 0; i < actualTypeArgsLength; i++) {\r\n+            Type actualType = actualTypeArgs[i];\r\n+            TypeDefinition item = null;\r\n+            Class<?> rawType = getRawClass(actualType);\r\n+            if (isParameterizedType(actualType)) {\r\n+                // Nested collection or map.\r\n+                item = TypeDefinitionBuilder.build(actualType, rawType, typeCache);\r\n+            } else if (isClass(actualType)) {\r\n+                item = TypeDefinitionBuilder.build(null, rawType, typeCache);\r\n+            }\r\n+            typeDefinition.getItems().add(item);\r\n+        }\r\n+\r\n+        return typeDefinition;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/TypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/TypeBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,42 +1,42 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.builder;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Type;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-@SPI\n-public interface TypeBuilder extends Prioritized {\n-\n-    /**\n-     * Whether the build accept the type or class passed in.\n-     */\n-    boolean accept(Type type, Class<?> clazz);\n-\n-    /**\n-     * Build type definition with the type or class.\n-     */\n-    TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache);\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Type;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+@SPI\r\n+public interface TypeBuilder extends Prioritized {\r\n+\r\n+    /**\r\n+     * Whether the build accept the type or class passed in.\r\n+     */\r\n+    boolean accept(Type type, Class<?> clazz);\r\n+\r\n+    /**\r\n+     * Build type definition with the type or class.\r\n+     */\r\n+    TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,43 +1,43 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.model;\n-\n-import java.util.Map;\n-\n-/**\n- * 2018/10/25\n- */\n-public class FullServiceDefinition extends ServiceDefinition {\n-\n-    private Map<String, String> parameters;\n-\n-    public Map<String, String> getParameters() {\n-        return parameters;\n-    }\n-\n-    public void setParameters(Map<String, String> parameters) {\n-        this.parameters = parameters;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"FullServiceDefinition{\" +\n-                \"parameters=\" + parameters +\n-                \"} \" + super.toString();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.model;\r\n+\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2018/10/25\r\n+ */\r\n+public class FullServiceDefinition extends ServiceDefinition {\r\n+\r\n+    private Map<String, String> parameters;\r\n+\r\n+    public Map<String, String> getParameters() {\r\n+        return parameters;\r\n+    }\r\n+\r\n+    public void setParameters(Map<String, String> parameters) {\r\n+        this.parameters = parameters;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"FullServiceDefinition{\" +\r\n+                \"parameters=\" + parameters +\r\n+                \"} \" + super.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/MethodDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/MethodDefinition.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,100 +1,100 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.model;\n-\n-import java.io.Serializable;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.List;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatType;\n-import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatTypes;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class MethodDefinition implements Serializable {\n-\n-    private String name;\n-    private String[] parameterTypes;\n-    private String returnType;\n-    private List<TypeDefinition> parameters;\n-\n-    public String getName() {\n-        return name;\n-    }\n-\n-    public List<TypeDefinition> getParameters() {\n-        if (parameters == null) {\n-            parameters = new ArrayList<>();\n-        }\n-        return parameters;\n-    }\n-\n-    public String[] getParameterTypes() {\n-        return parameterTypes;\n-    }\n-\n-    public String getReturnType() {\n-        return returnType;\n-    }\n-\n-    public void setName(String name) {\n-        this.name = name;\n-    }\n-\n-    public void setParameters(List<TypeDefinition> parameters) {\n-        this.parameters = parameters;\n-    }\n-\n-    public void setParameterTypes(String[] parameterTypes) {\n-        this.parameterTypes = formatTypes(parameterTypes);\n-    }\n-\n-    public void setReturnType(String returnType) {\n-        this.returnType = formatType(returnType);\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"MethodDefinition [name=\" + name + \", parameterTypes=\" + Arrays.toString(parameterTypes)\n-                + \", returnType=\" + returnType + \"]\";\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof MethodDefinition)) {\n-            return false;\n-        }\n-        MethodDefinition that = (MethodDefinition) o;\n-        return Objects.equals(getName(), that.getName()) &&\n-                Arrays.equals(getParameterTypes(), that.getParameterTypes()) &&\n-                Objects.equals(getReturnType(), that.getReturnType()) &&\n-                Objects.equals(getParameters(), that.getParameters());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        int result = Objects.hash(getName(), getReturnType(), getParameters());\n-        result = 31 * result + Arrays.hashCode(getParameterTypes());\n-        return result;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.model;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatType;\r\n+import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatTypes;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class MethodDefinition implements Serializable {\r\n+\r\n+    private String name;\r\n+    private String[] parameterTypes;\r\n+    private String returnType;\r\n+    private List<TypeDefinition> parameters;\r\n+\r\n+    public String getName() {\r\n+        return name;\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getParameters() {\r\n+        if (parameters == null) {\r\n+            parameters = new ArrayList<>();\r\n+        }\r\n+        return parameters;\r\n+    }\r\n+\r\n+    public String[] getParameterTypes() {\r\n+        return parameterTypes;\r\n+    }\r\n+\r\n+    public String getReturnType() {\r\n+        return returnType;\r\n+    }\r\n+\r\n+    public void setName(String name) {\r\n+        this.name = name;\r\n+    }\r\n+\r\n+    public void setParameters(List<TypeDefinition> parameters) {\r\n+        this.parameters = parameters;\r\n+    }\r\n+\r\n+    public void setParameterTypes(String[] parameterTypes) {\r\n+        this.parameterTypes = formatTypes(parameterTypes);\r\n+    }\r\n+\r\n+    public void setReturnType(String returnType) {\r\n+        this.returnType = formatType(returnType);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"MethodDefinition [name=\" + name + \", parameterTypes=\" + Arrays.toString(parameterTypes)\r\n+                + \", returnType=\" + returnType + \"]\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof MethodDefinition)) {\r\n+            return false;\r\n+        }\r\n+        MethodDefinition that = (MethodDefinition) o;\r\n+        return Objects.equals(getName(), that.getName()) &&\r\n+                Arrays.equals(getParameterTypes(), that.getParameterTypes()) &&\r\n+                Objects.equals(getReturnType(), that.getReturnType()) &&\r\n+                Objects.equals(getParameters(), that.getParameters());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        int result = Objects.hash(getName(), getReturnType(), getParameters());\r\n+        result = 31 * result + Arrays.hashCode(getParameterTypes());\r\n+        return result;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/ServiceDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/ServiceDefinition.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,101 +1,101 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.model;\n-\n-import java.io.Serializable;\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.Objects;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class ServiceDefinition implements Serializable {\n-\n-    private String canonicalName;\n-    private String codeSource;\n-    private List<MethodDefinition> methods;\n-    private List<TypeDefinition> types;\n-\n-    public String getCanonicalName() {\n-        return canonicalName;\n-    }\n-\n-    public String getCodeSource() {\n-        return codeSource;\n-    }\n-\n-    public List<MethodDefinition> getMethods() {\n-        if (methods == null) {\n-            methods = new ArrayList<>();\n-        }\n-        return methods;\n-    }\n-\n-    public List<TypeDefinition> getTypes() {\n-        if (types == null) {\n-            types = new ArrayList<>();\n-        }\n-        return types;\n-    }\n-\n-    public String getUniqueId() {\n-        return canonicalName + \"@\" + codeSource;\n-    }\n-\n-    public void setCanonicalName(String canonicalName) {\n-        this.canonicalName = canonicalName;\n-    }\n-\n-    public void setCodeSource(String codeSource) {\n-        this.codeSource = codeSource;\n-    }\n-\n-    public void setMethods(List<MethodDefinition> methods) {\n-        this.methods = methods;\n-    }\n-\n-    public void setTypes(List<TypeDefinition> types) {\n-        this.types = types;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"ServiceDefinition [canonicalName=\" + canonicalName + \", codeSource=\" + codeSource + \", methods=\"\n-                + methods + \"]\";\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof ServiceDefinition)) {\n-            return false;\n-        }\n-        ServiceDefinition that = (ServiceDefinition) o;\n-        return Objects.equals(getCanonicalName(), that.getCanonicalName()) &&\n-                Objects.equals(getCodeSource(), that.getCodeSource()) &&\n-                Objects.equals(getMethods(), that.getMethods()) &&\n-                Objects.equals(getTypes(), that.getTypes());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getCanonicalName(), getCodeSource(), getMethods(), getTypes());\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.model;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class ServiceDefinition implements Serializable {\r\n+\r\n+    private String canonicalName;\r\n+    private String codeSource;\r\n+    private List<MethodDefinition> methods;\r\n+    private List<TypeDefinition> types;\r\n+\r\n+    public String getCanonicalName() {\r\n+        return canonicalName;\r\n+    }\r\n+\r\n+    public String getCodeSource() {\r\n+        return codeSource;\r\n+    }\r\n+\r\n+    public List<MethodDefinition> getMethods() {\r\n+        if (methods == null) {\r\n+            methods = new ArrayList<>();\r\n+        }\r\n+        return methods;\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getTypes() {\r\n+        if (types == null) {\r\n+            types = new ArrayList<>();\r\n+        }\r\n+        return types;\r\n+    }\r\n+\r\n+    public String getUniqueId() {\r\n+        return canonicalName + \"@\" + codeSource;\r\n+    }\r\n+\r\n+    public void setCanonicalName(String canonicalName) {\r\n+        this.canonicalName = canonicalName;\r\n+    }\r\n+\r\n+    public void setCodeSource(String codeSource) {\r\n+        this.codeSource = codeSource;\r\n+    }\r\n+\r\n+    public void setMethods(List<MethodDefinition> methods) {\r\n+        this.methods = methods;\r\n+    }\r\n+\r\n+    public void setTypes(List<TypeDefinition> types) {\r\n+        this.types = types;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"ServiceDefinition [canonicalName=\" + canonicalName + \", codeSource=\" + codeSource + \", methods=\"\r\n+                + methods + \"]\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof ServiceDefinition)) {\r\n+            return false;\r\n+        }\r\n+        ServiceDefinition that = (ServiceDefinition) o;\r\n+        return Objects.equals(getCanonicalName(), that.getCanonicalName()) &&\r\n+                Objects.equals(getCodeSource(), that.getCodeSource()) &&\r\n+                Objects.equals(getMethods(), that.getMethods()) &&\r\n+                Objects.equals(getTypes(), that.getTypes());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getCanonicalName(), getCodeSource(), getMethods(), getTypes());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/TypeDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/TypeDefinition.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,189 +1,189 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.model;\n-\n-import com.google.gson.annotations.SerializedName;\n-\n-import java.io.Serializable;\n-import java.lang.reflect.ParameterizedType;\n-import java.util.ArrayList;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.common.utils.StringUtils.replace;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class TypeDefinition implements Serializable {\n-\n-    private String id;\n-    private String type;\n-    @SerializedName(\"items\")\n-    private List<TypeDefinition> items;\n-    @SerializedName(\"enum\")\n-    private List<String> enums;\n-    private String $ref;\n-    private Map<String, TypeDefinition> properties;\n-    private String typeBuilderName;\n-\n-    public TypeDefinition() {\n-    }\n-\n-    public TypeDefinition(String type) {\n-        this.setType(type);\n-    }\n-\n-    /**\n-     * Format the {@link String} array presenting Java types\n-     *\n-     * @param types the strings presenting Java types\n-     * @return new String array of Java types after be formatted\n-     * @since 2.7.9\n-     */\n-    public static String[] formatTypes(String[] types) {\n-        String[] newTypes = new String[types.length];\n-        for (int i = 0; i < types.length; i++) {\n-            newTypes[i] = formatType(types[i]);\n-        }\n-        return newTypes;\n-    }\n-\n-    /**\n-     * Format the {@link String} presenting Java type\n-     *\n-     * @param type the String presenting type\n-     * @return new String presenting Java type after be formatted\n-     * @since 2.7.9\n-     */\n-    public static String formatType(String type) {\n-        if (isGenericType(type)) {\n-            return formatGenericType(type);\n-        }\n-        return type;\n-    }\n-\n-    /**\n-     * Replacing <code>\", \"</code> to <code>\",\"</code> will not change the semantic of\n-     * {@link ParameterizedType#toString()}\n-     *\n-     * @param type\n-     * @return formatted type\n-     * @see sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl\n-     */\n-    private static String formatGenericType(String type) {\n-        return replace(type, \", \", \",\");\n-    }\n-\n-    private static boolean isGenericType(String type) {\n-        return type.contains(\"<\") && type.contains(\">\");\n-    }\n-\n-    public String get$ref() {\n-        return $ref;\n-    }\n-\n-    public List<String> getEnums() {\n-        if (enums == null) {\n-            enums = new ArrayList<String>();\n-        }\n-        return enums;\n-    }\n-\n-    public String getId() {\n-        return id;\n-    }\n-\n-    public List<TypeDefinition> getItems() {\n-        if (items == null) {\n-            items = new ArrayList<>();\n-        }\n-        return items;\n-    }\n-\n-    public Map<String, TypeDefinition> getProperties() {\n-        if (properties == null) {\n-            properties = new HashMap<>();\n-        }\n-        return properties;\n-    }\n-\n-    public String getType() {\n-        return type;\n-    }\n-\n-    public String getTypeBuilderName() {\n-        return typeBuilderName;\n-    }\n-\n-    public void set$ref(String $ref) {\n-        this.$ref = $ref;\n-    }\n-\n-    public void setEnums(List<String> enums) {\n-        this.enums = enums;\n-    }\n-\n-    public void setId(String id) {\n-        this.id = id;\n-    }\n-\n-    public void setItems(List<TypeDefinition> items) {\n-        this.items = items;\n-    }\n-\n-    public void setProperties(Map<String, TypeDefinition> properties) {\n-        this.properties = properties;\n-    }\n-\n-    public void setType(String type) {\n-        this.type = formatType(type);\n-    }\n-\n-    public void setTypeBuilderName(String typeBuilderName) {\n-        this.typeBuilderName = typeBuilderName;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"TypeDefinition [id=\" + id + \", type=\" + type + \", properties=\" + properties + \", $ref=\" + $ref + \"]\";\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof TypeDefinition)) {\n-            return false;\n-        }\n-        TypeDefinition that = (TypeDefinition) o;\n-        return Objects.equals(getId(), that.getId()) &&\n-                Objects.equals(getType(), that.getType()) &&\n-                Objects.equals(getItems(), that.getItems()) &&\n-                Objects.equals(getEnums(), that.getEnums()) &&\n-                Objects.equals(get$ref(), that.get$ref()) &&\n-                Objects.equals(getProperties(), that.getProperties());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getId(), getType(), getItems(), getEnums(), get$ref(), getProperties());\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.model;\r\n+\r\n+import com.google.gson.annotations.SerializedName;\r\n+\r\n+import java.io.Serializable;\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.util.ArrayList;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.common.utils.StringUtils.replace;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class TypeDefinition implements Serializable {\r\n+\r\n+    private String id;\r\n+    private String type;\r\n+    @SerializedName(\"items\")\r\n+    private List<TypeDefinition> items;\r\n+    @SerializedName(\"enum\")\r\n+    private List<String> enums;\r\n+    private String $ref;\r\n+    private Map<String, TypeDefinition> properties;\r\n+    private String typeBuilderName;\r\n+\r\n+    public TypeDefinition() {\r\n+    }\r\n+\r\n+    public TypeDefinition(String type) {\r\n+        this.setType(type);\r\n+    }\r\n+\r\n+    /**\r\n+     * Format the {@link String} array presenting Java types\r\n+     *\r\n+     * @param types the strings presenting Java types\r\n+     * @return new String array of Java types after be formatted\r\n+     * @since 2.7.9\r\n+     */\r\n+    public static String[] formatTypes(String[] types) {\r\n+        String[] newTypes = new String[types.length];\r\n+        for (int i = 0; i < types.length; i++) {\r\n+            newTypes[i] = formatType(types[i]);\r\n+        }\r\n+        return newTypes;\r\n+    }\r\n+\r\n+    /**\r\n+     * Format the {@link String} presenting Java type\r\n+     *\r\n+     * @param type the String presenting type\r\n+     * @return new String presenting Java type after be formatted\r\n+     * @since 2.7.9\r\n+     */\r\n+    public static String formatType(String type) {\r\n+        if (isGenericType(type)) {\r\n+            return formatGenericType(type);\r\n+        }\r\n+        return type;\r\n+    }\r\n+\r\n+    /**\r\n+     * Replacing <code>\", \"</code> to <code>\",\"</code> will not change the semantic of\r\n+     * {@link ParameterizedType#toString()}\r\n+     *\r\n+     * @param type\r\n+     * @return formatted type\r\n+     * @see sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl\r\n+     */\r\n+    private static String formatGenericType(String type) {\r\n+        return replace(type, \", \", \",\");\r\n+    }\r\n+\r\n+    private static boolean isGenericType(String type) {\r\n+        return type.contains(\"<\") && type.contains(\">\");\r\n+    }\r\n+\r\n+    public String get$ref() {\r\n+        return $ref;\r\n+    }\r\n+\r\n+    public List<String> getEnums() {\r\n+        if (enums == null) {\r\n+            enums = new ArrayList<String>();\r\n+        }\r\n+        return enums;\r\n+    }\r\n+\r\n+    public String getId() {\r\n+        return id;\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getItems() {\r\n+        if (items == null) {\r\n+            items = new ArrayList<>();\r\n+        }\r\n+        return items;\r\n+    }\r\n+\r\n+    public Map<String, TypeDefinition> getProperties() {\r\n+        if (properties == null) {\r\n+            properties = new HashMap<>();\r\n+        }\r\n+        return properties;\r\n+    }\r\n+\r\n+    public String getType() {\r\n+        return type;\r\n+    }\r\n+\r\n+    public String getTypeBuilderName() {\r\n+        return typeBuilderName;\r\n+    }\r\n+\r\n+    public void set$ref(String $ref) {\r\n+        this.$ref = $ref;\r\n+    }\r\n+\r\n+    public void setEnums(List<String> enums) {\r\n+        this.enums = enums;\r\n+    }\r\n+\r\n+    public void setId(String id) {\r\n+        this.id = id;\r\n+    }\r\n+\r\n+    public void setItems(List<TypeDefinition> items) {\r\n+        this.items = items;\r\n+    }\r\n+\r\n+    public void setProperties(Map<String, TypeDefinition> properties) {\r\n+        this.properties = properties;\r\n+    }\r\n+\r\n+    public void setType(String type) {\r\n+        this.type = formatType(type);\r\n+    }\r\n+\r\n+    public void setTypeBuilderName(String typeBuilderName) {\r\n+        this.typeBuilderName = typeBuilderName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"TypeDefinition [id=\" + id + \", type=\" + type + \", properties=\" + properties + \", $ref=\" + $ref + \"]\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof TypeDefinition)) {\r\n+            return false;\r\n+        }\r\n+        TypeDefinition that = (TypeDefinition) o;\r\n+        return Objects.equals(getId(), that.getId()) &&\r\n+                Objects.equals(getType(), that.getType()) &&\r\n+                Objects.equals(getItems(), that.getItems()) &&\r\n+                Objects.equals(getEnums(), that.getEnums()) &&\r\n+                Objects.equals(get$ref(), that.get$ref()) &&\r\n+                Objects.equals(getProperties(), that.getProperties());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getId(), getType(), getItems(), getEnums(), get$ref(), getProperties());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/util/ClassUtils.java", "source2": "org/apache/dubbo/metadata/definition/util/ClassUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,111 +1,111 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.util;\n-\n-import java.lang.reflect.Field;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.net.URL;\n-import java.security.CodeSource;\n-import java.security.ProtectionDomain;\n-import java.util.ArrayList;\n-import java.util.List;\n-\n-/**\n- * 2015/1/27.\n- */\n-public final class ClassUtils {\n-\n-    /**\n-     * Get the code source file or class path of the Class passed in.\n-     *\n-     * @param clazz\n-     * @return Jar file name or class path.\n-     */\n-    public static String getCodeSource(Class<?> clazz) {\n-        ProtectionDomain protectionDomain = clazz.getProtectionDomain();\n-        if (protectionDomain == null || protectionDomain.getCodeSource() == null) {\n-            return null;\n-        }\n-\n-        CodeSource codeSource = clazz.getProtectionDomain().getCodeSource();\n-        URL location = codeSource.getLocation();\n-        if (location == null) {\n-            return null;\n-        }\n-\n-        String path = codeSource.getLocation().toExternalForm();\n-\n-        if (path.endsWith(\".jar\") && path.contains(\"/\")) {\n-            return path.substring(path.lastIndexOf('/') + 1);\n-        }\n-        return path;\n-    }\n-\n-    /**\n-     * Get all non-static fields of the Class passed in or its super classes.\n-     * <p>\n-     *\n-     * @param clazz Class to parse.\n-     * @return field list\n-     */\n-    public static List<Field> getNonStaticFields(final Class<?> clazz) {\n-        List<Field> result = new ArrayList<>();\n-        Class<?> target = clazz;\n-        while (target != null) {\n-            if (JaketConfigurationUtils.isExcludedType(target)) {\n-                break;\n-            }\n-\n-            Field[] fields = target.getDeclaredFields();\n-            for (Field field : fields) {\n-                int modifiers = field.getModifiers();\n-                if (Modifier.isStatic(modifiers) || Modifier.isTransient(modifiers)) {\n-                    continue;\n-                }\n-\n-                result.add(field);\n-            }\n-            target = target.getSuperclass();\n-        }\n-\n-        return result;\n-    }\n-\n-    /**\n-     * Get all public, non-static methods of the Class passed in.\n-     * <p>\n-     *\n-     * @param clazz Class to parse.\n-     * @return methods list\n-     */\n-    public static List<Method> getPublicNonStaticMethods(final Class<?> clazz) {\n-        List<Method> result = new ArrayList<Method>();\n-\n-        Method[] methods = clazz.getMethods();\n-        for (Method method : methods) {\n-            int mod = method.getModifiers();\n-            if (Modifier.isPublic(mod) && !Modifier.isStatic(mod)) {\n-                result.add(method);\n-            }\n-        }\n-        return result;\n-    }\n-\n-    private ClassUtils() {\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.util;\r\n+\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.net.URL;\r\n+import java.security.CodeSource;\r\n+import java.security.ProtectionDomain;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public final class ClassUtils {\r\n+\r\n+    /**\r\n+     * Get the code source file or class path of the Class passed in.\r\n+     *\r\n+     * @param clazz\r\n+     * @return Jar file name or class path.\r\n+     */\r\n+    public static String getCodeSource(Class<?> clazz) {\r\n+        ProtectionDomain protectionDomain = clazz.getProtectionDomain();\r\n+        if (protectionDomain == null || protectionDomain.getCodeSource() == null) {\r\n+            return null;\r\n+        }\r\n+\r\n+        CodeSource codeSource = clazz.getProtectionDomain().getCodeSource();\r\n+        URL location = codeSource.getLocation();\r\n+        if (location == null) {\r\n+            return null;\r\n+        }\r\n+\r\n+        String path = codeSource.getLocation().toExternalForm();\r\n+\r\n+        if (path.endsWith(\".jar\") && path.contains(\"/\")) {\r\n+            return path.substring(path.lastIndexOf('/') + 1);\r\n+        }\r\n+        return path;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all non-static fields of the Class passed in or its super classes.\r\n+     * <p>\r\n+     *\r\n+     * @param clazz Class to parse.\r\n+     * @return field list\r\n+     */\r\n+    public static List<Field> getNonStaticFields(final Class<?> clazz) {\r\n+        List<Field> result = new ArrayList<>();\r\n+        Class<?> target = clazz;\r\n+        while (target != null) {\r\n+            if (JaketConfigurationUtils.isExcludedType(target)) {\r\n+                break;\r\n+            }\r\n+\r\n+            Field[] fields = target.getDeclaredFields();\r\n+            for (Field field : fields) {\r\n+                int modifiers = field.getModifiers();\r\n+                if (Modifier.isStatic(modifiers) || Modifier.isTransient(modifiers)) {\r\n+                    continue;\r\n+                }\r\n+\r\n+                result.add(field);\r\n+            }\r\n+            target = target.getSuperclass();\r\n+        }\r\n+\r\n+        return result;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all public, non-static methods of the Class passed in.\r\n+     * <p>\r\n+     *\r\n+     * @param clazz Class to parse.\r\n+     * @return methods list\r\n+     */\r\n+    public static List<Method> getPublicNonStaticMethods(final Class<?> clazz) {\r\n+        List<Method> result = new ArrayList<Method>();\r\n+\r\n+        Method[] methods = clazz.getMethods();\r\n+        for (Method method : methods) {\r\n+            int mod = method.getModifiers();\r\n+            if (Modifier.isPublic(mod) && !Modifier.isStatic(mod)) {\r\n+                result.add(method);\r\n+            }\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    private ClassUtils() {\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java", "source2": "org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,102 +1,102 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.util;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.io.InputStream;\n-import java.util.Properties;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class JaketConfigurationUtils {\n-\n-    private static final String CONFIGURATION_FILE = \"jaket.properties\";\n-\n-    private static String[] includedInterfacePackages;\n-    private static String[] includedTypePackages;\n-    private static String[] closedTypes;\n-\n-    static {\n-        Properties props = new Properties();\n-        InputStream inStream = JaketConfigurationUtils.class.getClassLoader().getResourceAsStream(CONFIGURATION_FILE);\n-        try {\n-            props.load(inStream);\n-            String value = (String) props.get(\"included_interface_packages\");\n-            if (StringUtils.isNotEmpty(value)) {\n-                includedInterfacePackages = value.split(\",\");\n-            }\n-\n-            value = props.getProperty(\"included_type_packages\");\n-            if (StringUtils.isNotEmpty(value)) {\n-                includedTypePackages = value.split(\",\");\n-            }\n-\n-            value = props.getProperty(\"closed_types\");\n-            if (StringUtils.isNotEmpty(value)) {\n-                closedTypes = value.split(\",\");\n-            }\n-\n-        } catch (Throwable e) {\n-            // Ignore it.\n-        }\n-    }\n-\n-    public static boolean isExcludedInterface(Class<?> clazz) {\n-        if (includedInterfacePackages == null || includedInterfacePackages.length == 0) {\n-            return false;\n-        }\n-\n-        for (String packagePrefix : includedInterfacePackages) {\n-            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\n-                return false;\n-            }\n-        }\n-\n-        return true;\n-    }\n-\n-    public static boolean isExcludedType(Class<?> clazz) {\n-        if (includedTypePackages == null || includedTypePackages.length == 0) {\n-            return false;\n-        }\n-\n-        for (String packagePrefix : includedTypePackages) {\n-            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\n-                return false;\n-            }\n-        }\n-\n-        return true;\n-    }\n-\n-    public static boolean needAnalyzing(Class<?> clazz) {\n-        String canonicalName = clazz.getCanonicalName();\n-\n-        if (closedTypes != null && closedTypes.length > 0) {\n-            for (String type : closedTypes) {\n-                if (canonicalName.startsWith(type)) {\n-                    return false;\n-                }\n-            }\n-        }\n-\n-        return !isExcludedType(clazz);\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.definition.util;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.io.InputStream;\r\n+import java.util.Properties;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class JaketConfigurationUtils {\r\n+\r\n+    private static final String CONFIGURATION_FILE = \"jaket.properties\";\r\n+\r\n+    private static String[] includedInterfacePackages;\r\n+    private static String[] includedTypePackages;\r\n+    private static String[] closedTypes;\r\n+\r\n+    static {\r\n+        Properties props = new Properties();\r\n+        InputStream inStream = JaketConfigurationUtils.class.getClassLoader().getResourceAsStream(CONFIGURATION_FILE);\r\n+        try {\r\n+            props.load(inStream);\r\n+            String value = (String) props.get(\"included_interface_packages\");\r\n+            if (StringUtils.isNotEmpty(value)) {\r\n+                includedInterfacePackages = value.split(\",\");\r\n+            }\r\n+\r\n+            value = props.getProperty(\"included_type_packages\");\r\n+            if (StringUtils.isNotEmpty(value)) {\r\n+                includedTypePackages = value.split(\",\");\r\n+            }\r\n+\r\n+            value = props.getProperty(\"closed_types\");\r\n+            if (StringUtils.isNotEmpty(value)) {\r\n+                closedTypes = value.split(\",\");\r\n+            }\r\n+\r\n+        } catch (Throwable e) {\r\n+            // Ignore it.\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean isExcludedInterface(Class<?> clazz) {\r\n+        if (includedInterfacePackages == null || includedInterfacePackages.length == 0) {\r\n+            return false;\r\n+        }\r\n+\r\n+        for (String packagePrefix : includedInterfacePackages) {\r\n+            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    public static boolean isExcludedType(Class<?> clazz) {\r\n+        if (includedTypePackages == null || includedTypePackages.length == 0) {\r\n+            return false;\r\n+        }\r\n+\r\n+        for (String packagePrefix : includedTypePackages) {\r\n+            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    public static boolean needAnalyzing(Class<?> clazz) {\r\n+        String canonicalName = clazz.getCanonicalName();\r\n+\r\n+        if (closedTypes != null && closedTypes.length > 0) {\r\n+            for (String type : closedTypes) {\r\n+                if (canonicalName.startsWith(type)) {\r\n+                    return false;\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return !isExcludedType(clazz);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/MetadataReport.java", "source2": "org/apache/dubbo/metadata/report/MetadataReport.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,77 +1,77 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report;\n-\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.metadata.MappingListener;\n-import org.apache.dubbo.metadata.MetadataInfo;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\n-\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-public interface MetadataReport {\n-    /**\n-     * Service Definition -- START\n-     **/\n-    void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition);\n-\n-    String getServiceDefinition(MetadataIdentifier metadataIdentifier);\n-\n-    /**\n-     * Application Metadata -- START\n-     **/\n-    default void publishAppMetadata(SubscriberMetadataIdentifier identifier, MetadataInfo metadataInfo) {\n-    }\n-\n-    default MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map<String, String> instanceMetadata) {\n-        return null;\n-    }\n-\n-    /**\n-     * Service<-->Application Mapping -- START\n-     **/\n-    default Set<String> getServiceAppMapping(String serviceKey, MappingListener listener, URL url) {\n-        return Collections.emptySet();\n-    }\n-\n-    default void registerServiceAppMapping(String serviceKey, String application, URL url) {\n-        return;\n-    }\n-\n-    /**\n-     * deprecated or need triage\n-     **/\n-    void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap);\n-\n-    List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\n-\n-    void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls);\n-\n-    List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report;\r\n+\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.metadata.MappingListener;\r\n+import org.apache.dubbo.metadata.MetadataInfo;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+public interface MetadataReport {\r\n+    /**\r\n+     * Service Definition -- START\r\n+     **/\r\n+    void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition);\r\n+\r\n+    String getServiceDefinition(MetadataIdentifier metadataIdentifier);\r\n+\r\n+    /**\r\n+     * Application Metadata -- START\r\n+     **/\r\n+    default void publishAppMetadata(SubscriberMetadataIdentifier identifier, MetadataInfo metadataInfo) {\r\n+    }\r\n+\r\n+    default MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map<String, String> instanceMetadata) {\r\n+        return null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Service<-->Application Mapping -- START\r\n+     **/\r\n+    default Set<String> getServiceAppMapping(String serviceKey, MappingListener listener, URL url) {\r\n+        return Collections.emptySet();\r\n+    }\r\n+\r\n+    default void registerServiceAppMapping(String serviceKey, String application, URL url) {\r\n+        return;\r\n+    }\r\n+\r\n+    /**\r\n+     * deprecated or need triage\r\n+     **/\r\n+    void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap);\r\n+\r\n+    List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\r\n+\r\n+    void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls);\r\n+\r\n+    List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/MetadataReportFactory.java", "source2": "org/apache/dubbo/metadata/report/MetadataReportFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,30 +1,30 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.Adaptive;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-/**\n- */\n-@SPI(\"redis\")\n-public interface MetadataReportFactory {\n-\n-    @Adaptive({\"protocol\"})\n-    MetadataReport getMetadataReport(URL url);\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.Adaptive;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+/**\r\n+ */\r\n+@SPI(\"redis\")\r\n+public interface MetadataReportFactory {\r\n+\r\n+    @Adaptive({\"protocol\"})\r\n+    MetadataReport getMetadataReport(URL url);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/MetadataReportInstance.java", "source2": "org/apache/dubbo/metadata/report/MetadataReportInstance.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,86 +1,86 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.URLBuilder;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.config.MetadataReportConfig;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_DIRECTORY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT_KEY;\n-\n-/**\n- * 2019-08-09\n- */\n-public class MetadataReportInstance {\n-\n-    private static AtomicBoolean init = new AtomicBoolean(false);\n-\n-    private static final Map<String, MetadataReport> metadataReports = new HashMap<>();\n-\n-    public static void init(MetadataReportConfig config) {\n-        if (init.get()) {\n-            return;\n-        }\n-        MetadataReportFactory metadataReportFactory = ExtensionLoader.getExtensionLoader(MetadataReportFactory.class).getAdaptiveExtension();\n-        URL url = config.toUrl();\n-        if (METADATA_REPORT_KEY.equals(url.getProtocol())) {\n-            String protocol = url.getParameter(METADATA_REPORT_KEY, DEFAULT_DIRECTORY);\n-            url = URLBuilder.from(url)\n-                    .setProtocol(protocol)\n-                    .removeParameter(METADATA_REPORT_KEY)\n-                    .build();\n-        }\n-        url = url.addParameterIfAbsent(APPLICATION_KEY, ApplicationModel.getApplicationConfig().getName());\n-        String relatedRegistryId = config.getRegistry() == null ? DEFAULT_KEY : config.getRegistry();\n-//        RegistryConfig registryConfig = ApplicationModel.getConfigManager().getRegistry(relatedRegistryId)\n-//                .orElseThrow(() -> new IllegalStateException(\"Registry id \" + relatedRegistryId + \" does not exist.\"));\n-        metadataReports.put(relatedRegistryId, metadataReportFactory.getMetadataReport(url));\n-        init.set(true);\n-    }\n-\n-    public static Map<String, MetadataReport> getMetadataReports(boolean checked) {\n-        if (checked) {\n-            checkInit();\n-        }\n-        return metadataReports;\n-    }\n-\n-    public static MetadataReport getMetadataReport(String registryKey) {\n-        checkInit();\n-        MetadataReport metadataReport = metadataReports.get(registryKey);\n-        if (metadataReport == null) {\n-            metadataReport = metadataReports.values().iterator().next();\n-        }\n-        return metadataReport;\n-    }\n-\n-\n-    private static void checkInit() {\n-        if (!init.get()) {\n-            throw new IllegalStateException(\"the metadata report was not inited.\");\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.URLBuilder;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.config.MetadataReportConfig;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_DIRECTORY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT_KEY;\r\n+\r\n+/**\r\n+ * 2019-08-09\r\n+ */\r\n+public class MetadataReportInstance {\r\n+\r\n+    private static AtomicBoolean init = new AtomicBoolean(false);\r\n+\r\n+    private static final Map<String, MetadataReport> metadataReports = new HashMap<>();\r\n+\r\n+    public static void init(MetadataReportConfig config) {\r\n+        if (init.get()) {\r\n+            return;\r\n+        }\r\n+        MetadataReportFactory metadataReportFactory = ExtensionLoader.getExtensionLoader(MetadataReportFactory.class).getAdaptiveExtension();\r\n+        URL url = config.toUrl();\r\n+        if (METADATA_REPORT_KEY.equals(url.getProtocol())) {\r\n+            String protocol = url.getParameter(METADATA_REPORT_KEY, DEFAULT_DIRECTORY);\r\n+            url = URLBuilder.from(url)\r\n+                    .setProtocol(protocol)\r\n+                    .removeParameter(METADATA_REPORT_KEY)\r\n+                    .build();\r\n+        }\r\n+        url = url.addParameterIfAbsent(APPLICATION_KEY, ApplicationModel.getApplicationConfig().getName());\r\n+        String relatedRegistryId = config.getRegistry() == null ? DEFAULT_KEY : config.getRegistry();\r\n+//        RegistryConfig registryConfig = ApplicationModel.getConfigManager().getRegistry(relatedRegistryId)\r\n+//                .orElseThrow(() -> new IllegalStateException(\"Registry id \" + relatedRegistryId + \" does not exist.\"));\r\n+        metadataReports.put(relatedRegistryId, metadataReportFactory.getMetadataReport(url));\r\n+        init.set(true);\r\n+    }\r\n+\r\n+    public static Map<String, MetadataReport> getMetadataReports(boolean checked) {\r\n+        if (checked) {\r\n+            checkInit();\r\n+        }\r\n+        return metadataReports;\r\n+    }\r\n+\r\n+    public static MetadataReport getMetadataReport(String registryKey) {\r\n+        checkInit();\r\n+        MetadataReport metadataReport = metadataReports.get(registryKey);\r\n+        if (metadataReport == null) {\r\n+            metadataReport = metadataReports.values().iterator().next();\r\n+        }\r\n+        return metadataReport;\r\n+    }\r\n+\r\n+\r\n+    private static void checkInit() {\r\n+        if (!init.get()) {\r\n+            throw new IllegalStateException(\"the metadata report was not inited.\");\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,63 +1,63 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\n-import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\n-\n-/**\n- * The Base class of MetadataIdentifier for service scope\n- * <p>\n- * 2019-08-09\n- */\n-public class BaseApplicationMetadataIdentifier {\n-    String application;\n-\n-    String getUniqueKey(KeyTypeEnum keyType, String... params) {\n-        if (keyType == KeyTypeEnum.PATH) {\n-            return getFilePathKey(params);\n-        }\n-        return getIdentifierKey(params);\n-    }\n-\n-    String getIdentifierKey(String... params) {\n-        return application + joinParams(KEY_SEPARATOR, params);\n-    }\n-\n-    private String joinParams(String joinChar, String... params) {\n-        if (params == null || params.length == 0) {\n-            return \"\";\n-        }\n-        StringBuilder sb = new StringBuilder();\n-        for (String param : params) {\n-            sb.append(joinChar);\n-            sb.append(param);\n-        }\n-        return sb.toString();\n-    }\n-\n-    private String getFilePathKey(String... params) {\n-        return getFilePathKey(DEFAULT_PATH_TAG, params);\n-    }\n-\n-    private String getFilePathKey(String pathTag, String... params) {\n-        return buildPath(pathTag, application, joinParams(PATH_SEPARATOR, params));\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.identifier;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\r\n+\r\n+/**\r\n+ * The Base class of MetadataIdentifier for service scope\r\n+ * <p>\r\n+ * 2019-08-09\r\n+ */\r\n+public class BaseApplicationMetadataIdentifier {\r\n+    String application;\r\n+\r\n+    String getUniqueKey(KeyTypeEnum keyType, String... params) {\r\n+        if (keyType == KeyTypeEnum.PATH) {\r\n+            return getFilePathKey(params);\r\n+        }\r\n+        return getIdentifierKey(params);\r\n+    }\r\n+\r\n+    String getIdentifierKey(String... params) {\r\n+        return application + joinParams(KEY_SEPARATOR, params);\r\n+    }\r\n+\r\n+    private String joinParams(String joinChar, String... params) {\r\n+        if (params == null || params.length == 0) {\r\n+            return \"\";\r\n+        }\r\n+        StringBuilder sb = new StringBuilder();\r\n+        for (String param : params) {\r\n+            sb.append(joinChar);\r\n+            sb.append(param);\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    private String getFilePathKey(String... params) {\r\n+        return getFilePathKey(DEFAULT_PATH_TAG, params);\r\n+    }\r\n+\r\n+    private String getFilePathKey(String pathTag, String... params) {\r\n+        return buildPath(pathTag, application, joinParams(PATH_SEPARATOR, params));\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,25 +1,25 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-public interface BaseMetadataIdentifier {\n-\n-    String getUniqueKey(KeyTypeEnum keyType);\n-\n-    String getIdentifierKey();\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.identifier;\r\n+\r\n+public interface BaseMetadataIdentifier {\r\n+\r\n+    String getUniqueKey(KeyTypeEnum keyType);\r\n+\r\n+    String getIdentifierKey();\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,88 +1,88 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\n-import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\n-import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\n-\n-/**\n- * The Base class of MetadataIdentifier for service scope\n- * <p>\n- * 2019-08-09\n- */\n-public class BaseServiceMetadataIdentifier {\n-    String serviceInterface;\n-    String version;\n-    String group;\n-    String side;\n-\n-    String getUniqueKey(KeyTypeEnum keyType, String... params) {\n-        if (keyType == KeyTypeEnum.PATH) {\n-            return getFilePathKey(params);\n-        }\n-        return getIdentifierKey(params);\n-    }\n-\n-    String getIdentifierKey(String... params) {\n-\n-        return serviceInterface\n-                + KEY_SEPARATOR + (version == null ? \"\" : version)\n-                + KEY_SEPARATOR + (group == null ? \"\" : group)\n-                + KEY_SEPARATOR + (side == null ? \"\" : side)\n-                + joinParams(KEY_SEPARATOR, params);\n-    }\n-\n-    private String joinParams(String joinChar, String... params) {\n-        if (params == null || params.length == 0) {\n-            return \"\";\n-        }\n-        StringBuilder sb = new StringBuilder();\n-        for (String param : params) {\n-            if (param == null) {\n-                continue;\n-            }\n-            sb.append(joinChar);\n-            sb.append(param);\n-        }\n-        return sb.toString();\n-    }\n-\n-    private String getFilePathKey(String... params) {\n-        return getFilePathKey(DEFAULT_PATH_TAG, params);\n-    }\n-\n-    private String getFilePathKey(String pathTag, String... params) {\n-        return pathTag\n-                + (StringUtils.isEmpty(toServicePath()) ? \"\" : (PATH_SEPARATOR + toServicePath()))\n-                + (version == null ? \"\" : (PATH_SEPARATOR + version))\n-                + (group == null ? \"\" : (PATH_SEPARATOR + group))\n-                + (side == null ? \"\" : (PATH_SEPARATOR + side))\n-                + joinParams(PATH_SEPARATOR, params);\n-    }\n-\n-    public String toServicePath() {\n-        if (ANY_VALUE.equals(serviceInterface)) {\n-            return \"\";\n-        }\n-        return URL.encode(serviceInterface);\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\r\n+\r\n+/**\r\n+ * The Base class of MetadataIdentifier for service scope\r\n+ * <p>\r\n+ * 2019-08-09\r\n+ */\r\n+public class BaseServiceMetadataIdentifier {\r\n+    String serviceInterface;\r\n+    String version;\r\n+    String group;\r\n+    String side;\r\n+\r\n+    String getUniqueKey(KeyTypeEnum keyType, String... params) {\r\n+        if (keyType == KeyTypeEnum.PATH) {\r\n+            return getFilePathKey(params);\r\n+        }\r\n+        return getIdentifierKey(params);\r\n+    }\r\n+\r\n+    String getIdentifierKey(String... params) {\r\n+\r\n+        return serviceInterface\r\n+                + KEY_SEPARATOR + (version == null ? \"\" : version)\r\n+                + KEY_SEPARATOR + (group == null ? \"\" : group)\r\n+                + KEY_SEPARATOR + (side == null ? \"\" : side)\r\n+                + joinParams(KEY_SEPARATOR, params);\r\n+    }\r\n+\r\n+    private String joinParams(String joinChar, String... params) {\r\n+        if (params == null || params.length == 0) {\r\n+            return \"\";\r\n+        }\r\n+        StringBuilder sb = new StringBuilder();\r\n+        for (String param : params) {\r\n+            if (param == null) {\r\n+                continue;\r\n+            }\r\n+            sb.append(joinChar);\r\n+            sb.append(param);\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    private String getFilePathKey(String... params) {\r\n+        return getFilePathKey(DEFAULT_PATH_TAG, params);\r\n+    }\r\n+\r\n+    private String getFilePathKey(String pathTag, String... params) {\r\n+        return pathTag\r\n+                + (StringUtils.isEmpty(toServicePath()) ? \"\" : (PATH_SEPARATOR + toServicePath()))\r\n+                + (version == null ? \"\" : (PATH_SEPARATOR + version))\r\n+                + (group == null ? \"\" : (PATH_SEPARATOR + group))\r\n+                + (side == null ? \"\" : (PATH_SEPARATOR + side))\r\n+                + joinParams(PATH_SEPARATOR, params);\r\n+    }\r\n+\r\n+    public String toServicePath() {\r\n+        if (ANY_VALUE.equals(serviceInterface)) {\r\n+            return \"\";\r\n+        }\r\n+        return URL.encode(serviceInterface);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.java", "source2": "org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,62 +1,62 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\n-import static org.apache.dubbo.common.utils.StringUtils.isBlank;\n-import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\n-\n-/**\n- * 2019-08-15\n- */\n-public enum KeyTypeEnum {\n-\n-    PATH(PATH_SEPARATOR) {\n-        public String build(String one, String... others) {\n-            return buildPath(one, others);\n-        }\n-    },\n-\n-    UNIQUE_KEY(KEY_SEPARATOR) {\n-        public String build(String one, String... others) {\n-            StringBuilder keyBuilder = new StringBuilder(one);\n-            for (String other : others) {\n-                keyBuilder.append(separator).append(isBlank(other) ? EMPTY_STRING : other);\n-            }\n-            return keyBuilder.toString();\n-        }\n-    };\n-\n-    final String separator;\n-\n-    KeyTypeEnum(String separator) {\n-        this.separator = separator;\n-    }\n-\n-    /**\n-     * Build Key\n-     *\n-     * @param one    one\n-     * @param others the others\n-     * @return\n-     * @since 2.7.8\n-     */\n-    public abstract String build(String one, String... others);\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.identifier;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isBlank;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\r\n+\r\n+/**\r\n+ * 2019-08-15\r\n+ */\r\n+public enum KeyTypeEnum {\r\n+\r\n+    PATH(PATH_SEPARATOR) {\r\n+        public String build(String one, String... others) {\r\n+            return buildPath(one, others);\r\n+        }\r\n+    },\r\n+\r\n+    UNIQUE_KEY(KEY_SEPARATOR) {\r\n+        public String build(String one, String... others) {\r\n+            StringBuilder keyBuilder = new StringBuilder(one);\r\n+            for (String other : others) {\r\n+                keyBuilder.append(separator).append(isBlank(other) ? EMPTY_STRING : other);\r\n+            }\r\n+            return keyBuilder.toString();\r\n+        }\r\n+    };\r\n+\r\n+    final String separator;\r\n+\r\n+    KeyTypeEnum(String separator) {\r\n+        this.separator = separator;\r\n+    }\r\n+\r\n+    /**\r\n+     * Build Key\r\n+     *\r\n+     * @param one    one\r\n+     * @param others the others\r\n+     * @return\r\n+     * @since 2.7.8\r\n+     */\r\n+    public abstract String build(String one, String... others);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,105 +1,105 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-/**\n- * The MetadataIdentifier is used to store method descriptor.\n- * <p>\n- * The name of class is reserved because of it has been used in the previous version.\n- * <p>\n- * 2018/10/25\n- */\n-public class MetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\n-\n-    private String application;\n-\n-    public MetadataIdentifier() {\n-    }\n-\n-    public MetadataIdentifier(String serviceInterface, String version, String group, String side, String application) {\n-        this.serviceInterface = serviceInterface;\n-        this.version = version;\n-        this.group = group;\n-        this.side = side;\n-        this.application = application;\n-    }\n-\n-\n-    public MetadataIdentifier(URL url) {\n-        this.serviceInterface = url.getServiceInterface();\n-        this.version = url.getParameter(VERSION_KEY);\n-        this.group = url.getParameter(GROUP_KEY);\n-        this.side = url.getParameter(SIDE_KEY);\n-        setApplication(url.getParameter(APPLICATION_KEY));\n-    }\n-\n-    public String getUniqueKey(KeyTypeEnum keyType) {\n-        return super.getUniqueKey(keyType, application);\n-    }\n-\n-    public String getIdentifierKey() {\n-        return super.getIdentifierKey(application);\n-    }\n-\n-    public String getServiceInterface() {\n-        return serviceInterface;\n-    }\n-\n-    public void setServiceInterface(String serviceInterface) {\n-        this.serviceInterface = serviceInterface;\n-    }\n-\n-    public String getVersion() {\n-        return version;\n-    }\n-\n-    public void setVersion(String version) {\n-        this.version = version;\n-    }\n-\n-    public String getGroup() {\n-        return group;\n-    }\n-\n-    public void setGroup(String group) {\n-        this.group = group;\n-    }\n-\n-    public String getSide() {\n-        return side;\n-    }\n-\n-    public void setSide(String side) {\n-        this.side = side;\n-    }\n-\n-    public String getApplication() {\n-        return application;\n-    }\n-\n-    public void setApplication(String application) {\n-        this.application = application;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+/**\r\n+ * The MetadataIdentifier is used to store method descriptor.\r\n+ * <p>\r\n+ * The name of class is reserved because of it has been used in the previous version.\r\n+ * <p>\r\n+ * 2018/10/25\r\n+ */\r\n+public class MetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\r\n+\r\n+    private String application;\r\n+\r\n+    public MetadataIdentifier() {\r\n+    }\r\n+\r\n+    public MetadataIdentifier(String serviceInterface, String version, String group, String side, String application) {\r\n+        this.serviceInterface = serviceInterface;\r\n+        this.version = version;\r\n+        this.group = group;\r\n+        this.side = side;\r\n+        this.application = application;\r\n+    }\r\n+\r\n+\r\n+    public MetadataIdentifier(URL url) {\r\n+        this.serviceInterface = url.getServiceInterface();\r\n+        this.version = url.getParameter(VERSION_KEY);\r\n+        this.group = url.getParameter(GROUP_KEY);\r\n+        this.side = url.getParameter(SIDE_KEY);\r\n+        setApplication(url.getParameter(APPLICATION_KEY));\r\n+    }\r\n+\r\n+    public String getUniqueKey(KeyTypeEnum keyType) {\r\n+        return super.getUniqueKey(keyType, application);\r\n+    }\r\n+\r\n+    public String getIdentifierKey() {\r\n+        return super.getIdentifierKey(application);\r\n+    }\r\n+\r\n+    public String getServiceInterface() {\r\n+        return serviceInterface;\r\n+    }\r\n+\r\n+    public void setServiceInterface(String serviceInterface) {\r\n+        this.serviceInterface = serviceInterface;\r\n+    }\r\n+\r\n+    public String getVersion() {\r\n+        return version;\r\n+    }\r\n+\r\n+    public void setVersion(String version) {\r\n+        this.version = version;\r\n+    }\r\n+\r\n+    public String getGroup() {\r\n+        return group;\r\n+    }\r\n+\r\n+    public void setGroup(String group) {\r\n+        this.group = group;\r\n+    }\r\n+\r\n+    public String getSide() {\r\n+        return side;\r\n+    }\r\n+\r\n+    public void setSide(String side) {\r\n+        this.side = side;\r\n+    }\r\n+\r\n+    public String getApplication() {\r\n+        return application;\r\n+    }\r\n+\r\n+    public void setApplication(String application) {\r\n+        this.application = application;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,85 +1,85 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.metadata.MetadataConstants.KEY_REVISION_PREFIX;\n-\n-/**\n- * The ServiceMetadataIdentifier is used to store the {@link org.apache.dubbo.common.URL}\n- * that are from provider and consumer\n- * <p>\n- * 2019-08-09\n- */\n-public class ServiceMetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\n-\n-    private String revision;\n-    private String protocol;\n-\n-    public ServiceMetadataIdentifier() {\n-    }\n-\n-    public ServiceMetadataIdentifier(String serviceInterface, String version, String group, String side, String revision, String protocol) {\n-        this.serviceInterface = serviceInterface;\n-        this.version = version;\n-        this.group = group;\n-        this.side = side;\n-        this.revision = revision;\n-        this.protocol = protocol;\n-    }\n-\n-\n-    public ServiceMetadataIdentifier(URL url) {\n-        this.serviceInterface = url.getServiceInterface();\n-        this.version = url.getParameter(VERSION_KEY);\n-        this.group = url.getParameter(GROUP_KEY);\n-        this.side = url.getParameter(SIDE_KEY);\n-        this.protocol = url.getProtocol();\n-    }\n-\n-    public String getUniqueKey(KeyTypeEnum keyType) {\n-        return super.getUniqueKey(keyType, protocol, KEY_REVISION_PREFIX + revision);\n-    }\n-\n-    public String getIdentifierKey() {\n-        return super.getIdentifierKey(protocol, KEY_REVISION_PREFIX + revision);\n-    }\n-\n-    public void setRevision(String revision) {\n-        this.revision = revision;\n-    }\n-\n-    public void setProtocol(String protocol) {\n-        this.protocol = protocol;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"ServiceMetadataIdentifier{\" +\n-                \"revision='\" + revision + '\\'' +\n-                \", protocol='\" + protocol + '\\'' +\n-                \", serviceInterface='\" + serviceInterface + '\\'' +\n-                \", version='\" + version + '\\'' +\n-                \", group='\" + group + '\\'' +\n-                \", side='\" + side + '\\'' +\n-                \"} \" + super.toString();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.KEY_REVISION_PREFIX;\r\n+\r\n+/**\r\n+ * The ServiceMetadataIdentifier is used to store the {@link org.apache.dubbo.common.URL}\r\n+ * that are from provider and consumer\r\n+ * <p>\r\n+ * 2019-08-09\r\n+ */\r\n+public class ServiceMetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\r\n+\r\n+    private String revision;\r\n+    private String protocol;\r\n+\r\n+    public ServiceMetadataIdentifier() {\r\n+    }\r\n+\r\n+    public ServiceMetadataIdentifier(String serviceInterface, String version, String group, String side, String revision, String protocol) {\r\n+        this.serviceInterface = serviceInterface;\r\n+        this.version = version;\r\n+        this.group = group;\r\n+        this.side = side;\r\n+        this.revision = revision;\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+\r\n+    public ServiceMetadataIdentifier(URL url) {\r\n+        this.serviceInterface = url.getServiceInterface();\r\n+        this.version = url.getParameter(VERSION_KEY);\r\n+        this.group = url.getParameter(GROUP_KEY);\r\n+        this.side = url.getParameter(SIDE_KEY);\r\n+        this.protocol = url.getProtocol();\r\n+    }\r\n+\r\n+    public String getUniqueKey(KeyTypeEnum keyType) {\r\n+        return super.getUniqueKey(keyType, protocol, KEY_REVISION_PREFIX + revision);\r\n+    }\r\n+\r\n+    public String getIdentifierKey() {\r\n+        return super.getIdentifierKey(protocol, KEY_REVISION_PREFIX + revision);\r\n+    }\r\n+\r\n+    public void setRevision(String revision) {\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"ServiceMetadataIdentifier{\" +\r\n+                \"revision='\" + revision + '\\'' +\r\n+                \", protocol='\" + protocol + '\\'' +\r\n+                \", serviceInterface='\" + serviceInterface + '\\'' +\r\n+                \", version='\" + version + '\\'' +\r\n+                \", group='\" + group + '\\'' +\r\n+                \", side='\" + side + '\\'' +\r\n+                \"} \" + super.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,70 +1,70 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.REVISION_KEY;\n-\n-/**\n- * 2019-08-12\n- */\n-public class SubscriberMetadataIdentifier extends BaseApplicationMetadataIdentifier implements BaseMetadataIdentifier {\n-\n-    private String revision;\n-\n-    public SubscriberMetadataIdentifier() {\n-    }\n-\n-    public SubscriberMetadataIdentifier(String application, String revision) {\n-        this.application = application;\n-        this.revision = revision;\n-    }\n-\n-\n-    public SubscriberMetadataIdentifier(URL url) {\n-        this.application = url.getParameter(APPLICATION_KEY, \"\");\n-        this.revision = url.getParameter(REVISION_KEY, \"\");\n-    }\n-\n-    public String getUniqueKey(KeyTypeEnum keyType) {\n-        return super.getUniqueKey(keyType, revision);\n-    }\n-\n-    public String getIdentifierKey() {\n-        return super.getIdentifierKey(revision);\n-    }\n-\n-    public String getApplication() {\n-        return application;\n-    }\n-\n-    public void setApplication(String application) {\n-        this.application = application;\n-    }\n-\n-    public String getRevision() {\n-        return revision;\n-    }\n-\n-    public void setRevision(String revision) {\n-        this.revision = revision;\n-    }\n-\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REVISION_KEY;\r\n+\r\n+/**\r\n+ * 2019-08-12\r\n+ */\r\n+public class SubscriberMetadataIdentifier extends BaseApplicationMetadataIdentifier implements BaseMetadataIdentifier {\r\n+\r\n+    private String revision;\r\n+\r\n+    public SubscriberMetadataIdentifier() {\r\n+    }\r\n+\r\n+    public SubscriberMetadataIdentifier(String application, String revision) {\r\n+        this.application = application;\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+\r\n+    public SubscriberMetadataIdentifier(URL url) {\r\n+        this.application = url.getParameter(APPLICATION_KEY, \"\");\r\n+        this.revision = url.getParameter(REVISION_KEY, \"\");\r\n+    }\r\n+\r\n+    public String getUniqueKey(KeyTypeEnum keyType) {\r\n+        return super.getUniqueKey(keyType, revision);\r\n+    }\r\n+\r\n+    public String getIdentifierKey() {\r\n+        return super.getIdentifierKey(revision);\r\n+    }\r\n+\r\n+    public String getApplication() {\r\n+        return application;\r\n+    }\r\n+\r\n+    public void setApplication(String application) {\r\n+        this.application = application;\r\n+    }\r\n+\r\n+    public String getRevision() {\r\n+        return revision;\r\n+    }\r\n+\r\n+    public void setRevision(String revision) {\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java", "source2": "org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,468 +1,468 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.support;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.ConfigUtils;\n-import org.apache.dubbo.common.utils.NamedThreadFactory;\n-import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-import org.apache.dubbo.metadata.report.MetadataReport;\n-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;\n-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\n-\n-import com.google.gson.Gson;\n-import com.google.gson.reflect.TypeToken;\n-\n-import java.io.File;\n-import java.io.FileInputStream;\n-import java.io.FileOutputStream;\n-import java.io.IOException;\n-import java.io.InputStream;\n-import java.io.RandomAccessFile;\n-import java.lang.reflect.Type;\n-import java.nio.channels.FileChannel;\n-import java.nio.channels.FileLock;\n-import java.util.ArrayList;\n-import java.util.Calendar;\n-import java.util.Iterator;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Properties;\n-import java.util.Set;\n-import java.util.SortedSet;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.Executors;\n-import java.util.concurrent.ScheduledExecutorService;\n-import java.util.concurrent.ScheduledFuture;\n-import java.util.concurrent.ThreadLocalRandom;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-import java.util.concurrent.atomic.AtomicInteger;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.CYCLE_REPORT_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_CYCLE_REPORT;\n-import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_PERIOD;\n-import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_TIMES;\n-import static org.apache.dubbo.metadata.report.support.Constants.RETRY_PERIOD_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.RETRY_TIMES_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.SYNC_REPORT_KEY;\n-\n-/**\n- *\n- */\n-public abstract class AbstractMetadataReport implements MetadataReport {\n-\n-    protected final static String DEFAULT_ROOT = \"dubbo\";\n-\n-    private static final int ONE_DAY_IN_MILLISECONDS = 60 * 24 * 60 * 1000;\n-    private static final int FOUR_HOURS_IN_MILLISECONDS = 60 * 4 * 60 * 1000;\n-    // Log output\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    // Local disk cache, where the special key value.registries records the list of metadata centers, and the others are the list of notified service providers\n-    final Properties properties = new Properties();\n-    private final ExecutorService reportCacheExecutor = Executors.newFixedThreadPool(1, new NamedThreadFactory(\"DubboSaveMetadataReport\", true));\n-    final Map<MetadataIdentifier, Object> allMetadataReports = new ConcurrentHashMap<>(4);\n-\n-    private final AtomicLong lastCacheChanged = new AtomicLong();\n-    final Map<MetadataIdentifier, Object> failedReports = new ConcurrentHashMap<>(4);\n-    private URL reportURL;\n-    boolean syncReport;\n-    // Local disk cache file\n-    File file;\n-    private AtomicBoolean initialized = new AtomicBoolean(false);\n-    public MetadataReportRetry metadataReportRetry;\n-\n-    public AbstractMetadataReport(URL reportServerURL) {\n-        setUrl(reportServerURL);\n-        // Start file save timer\n-        String defaultFilename = System.getProperty(\"user.home\") + \"/.dubbo/dubbo-metadata-\" + reportServerURL.getParameter(APPLICATION_KEY) + \"-\" + reportServerURL.getAddress().replaceAll(\":\", \"-\") + \".cache\";\n-        String filename = reportServerURL.getParameter(FILE_KEY, defaultFilename);\n-        File file = null;\n-        if (ConfigUtils.isNotEmpty(filename)) {\n-            file = new File(filename);\n-            if (!file.exists() && file.getParentFile() != null && !file.getParentFile().exists()) {\n-                if (!file.getParentFile().mkdirs()) {\n-                    throw new IllegalArgumentException(\"Invalid service store file \" + file + \", cause: Failed to create directory \" + file.getParentFile() + \"!\");\n-                }\n-            }\n-            // if this file exist, firstly delete it.\n-            if (!initialized.getAndSet(true) && file.exists()) {\n-                file.delete();\n-            }\n-        }\n-        this.file = file;\n-        loadProperties();\n-        syncReport = reportServerURL.getParameter(SYNC_REPORT_KEY, false);\n-        metadataReportRetry = new MetadataReportRetry(reportServerURL.getParameter(RETRY_TIMES_KEY, DEFAULT_METADATA_REPORT_RETRY_TIMES),\n-                reportServerURL.getParameter(RETRY_PERIOD_KEY, DEFAULT_METADATA_REPORT_RETRY_PERIOD));\n-        // cycle report the data switch\n-        if (reportServerURL.getParameter(CYCLE_REPORT_KEY, DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {\n-            ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"DubboMetadataReportTimer\", true));\n-            scheduler.scheduleAtFixedRate(this::publishAll, calculateStartTime(), ONE_DAY_IN_MILLISECONDS, TimeUnit.MILLISECONDS);\n-        }\n-    }\n-\n-    public URL getUrl() {\n-        return reportURL;\n-    }\n-\n-    protected void setUrl(URL url) {\n-        if (url == null) {\n-            throw new IllegalArgumentException(\"metadataReport url == null\");\n-        }\n-        this.reportURL = url;\n-    }\n-\n-    private void doSaveProperties(long version) {\n-        if (version < lastCacheChanged.get()) {\n-            return;\n-        }\n-        if (file == null) {\n-            return;\n-        }\n-        // Save\n-        try {\n-            File lockfile = new File(file.getAbsolutePath() + \".lock\");\n-            if (!lockfile.exists()) {\n-                lockfile.createNewFile();\n-            }\n-            try (RandomAccessFile raf = new RandomAccessFile(lockfile, \"rw\");\n-                 FileChannel channel = raf.getChannel()) {\n-                FileLock lock = channel.tryLock();\n-                if (lock == null) {\n-                    throw new IOException(\"Can not lock the metadataReport cache file \" + file.getAbsolutePath() + \", ignore and retry later, maybe multi java process use the file, please config: dubbo.metadata.file=xxx.properties\");\n-                }\n-                // Save\n-                try {\n-                    if (!file.exists()) {\n-                        file.createNewFile();\n-                    }\n-                    try (FileOutputStream outputFile = new FileOutputStream(file)) {\n-                        properties.store(outputFile, \"Dubbo metadataReport Cache\");\n-                    }\n-                } finally {\n-                    lock.release();\n-                }\n-            }\n-        } catch (Throwable e) {\n-            if (version < lastCacheChanged.get()) {\n-                return;\n-            } else {\n-                reportCacheExecutor.execute(new SaveProperties(lastCacheChanged.incrementAndGet()));\n-            }\n-            logger.warn(\"Failed to save service store file, cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    void loadProperties() {\n-        if (file != null && file.exists()) {\n-            try (InputStream in = new FileInputStream(file)) {\n-                properties.load(in);\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Load service store file \" + file + \", data: \" + properties);\n-                }\n-            } catch (Throwable e) {\n-                logger.warn(\"Failed to load service store file \" + file, e);\n-            }\n-        }\n-    }\n-\n-    private void saveProperties(MetadataIdentifier metadataIdentifier, String value, boolean add, boolean sync) {\n-        if (file == null) {\n-            return;\n-        }\n-\n-        try {\n-            if (add) {\n-                properties.setProperty(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY), value);\n-            } else {\n-                properties.remove(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));\n-            }\n-            long version = lastCacheChanged.incrementAndGet();\n-            if (sync) {\n-                new SaveProperties(version).run();\n-            } else {\n-                reportCacheExecutor.execute(new SaveProperties(version));\n-            }\n-\n-        } catch (Throwable t) {\n-            logger.warn(t.getMessage(), t);\n-        }\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return getUrl().toString();\n-    }\n-\n-    private class SaveProperties implements Runnable {\n-        private long version;\n-\n-        private SaveProperties(long version) {\n-            this.version = version;\n-        }\n-\n-        @Override\n-        public void run() {\n-            doSaveProperties(version);\n-        }\n-    }\n-\n-    @Override\n-    public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\n-        if (syncReport) {\n-            storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition);\n-        } else {\n-            reportCacheExecutor.execute(() -> storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition));\n-        }\n-    }\n-\n-    private void storeProviderMetadataTask(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\n-        try {\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"store provider metadata. Identifier : \" + providerMetadataIdentifier + \"; definition: \" + serviceDefinition);\n-            }\n-            allMetadataReports.put(providerMetadataIdentifier, serviceDefinition);\n-            failedReports.remove(providerMetadataIdentifier);\n-            Gson gson = new Gson();\n-            String data = gson.toJson(serviceDefinition);\n-            doStoreProviderMetadata(providerMetadataIdentifier, data);\n-            saveProperties(providerMetadataIdentifier, data, true, !syncReport);\n-        } catch (Exception e) {\n-            // retry again. If failed again, throw exception.\n-            failedReports.put(providerMetadataIdentifier, serviceDefinition);\n-            metadataReportRetry.startRetryTask();\n-            logger.error(\"Failed to put provider metadata \" + providerMetadataIdentifier + \" in  \" + serviceDefinition + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    @Override\n-    public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\n-        if (syncReport) {\n-            storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap);\n-        } else {\n-            reportCacheExecutor.execute(() -> storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap));\n-        }\n-    }\n-\n-    public void storeConsumerMetadataTask(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\n-        try {\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"store consumer metadata. Identifier : \" + consumerMetadataIdentifier + \"; definition: \" + serviceParameterMap);\n-            }\n-            allMetadataReports.put(consumerMetadataIdentifier, serviceParameterMap);\n-            failedReports.remove(consumerMetadataIdentifier);\n-\n-            Gson gson = new Gson();\n-            String data = gson.toJson(serviceParameterMap);\n-            doStoreConsumerMetadata(consumerMetadataIdentifier, data);\n-            saveProperties(consumerMetadataIdentifier, data, true, !syncReport);\n-        } catch (Exception e) {\n-            // retry again. If failed again, throw exception.\n-            failedReports.put(consumerMetadataIdentifier, serviceParameterMap);\n-            metadataReportRetry.startRetryTask();\n-            logger.error(\"Failed to put consumer metadata \" + consumerMetadataIdentifier + \";  \" + serviceParameterMap + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    @Override\n-    public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {\n-        if (syncReport) {\n-            doSaveMetadata(metadataIdentifier, url);\n-        } else {\n-            reportCacheExecutor.execute(() -> doSaveMetadata(metadataIdentifier, url));\n-        }\n-    }\n-\n-    @Override\n-    public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {\n-        if (syncReport) {\n-            doRemoveMetadata(metadataIdentifier);\n-        } else {\n-            reportCacheExecutor.execute(() -> doRemoveMetadata(metadataIdentifier));\n-        }\n-    }\n-\n-    @Override\n-    public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {\n-        // TODO, fallback to local cache\n-        return doGetExportedURLs(metadataIdentifier);\n-    }\n-\n-    @Override\n-    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {\n-        if (syncReport) {\n-            doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls));\n-        } else {\n-            reportCacheExecutor.execute(() -> doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls)));\n-        }\n-    }\n-\n-\n-    @Override\n-    public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {\n-        String content = doGetSubscribedURLs(subscriberMetadataIdentifier);\n-        Type setType = new TypeToken<SortedSet<String>>() {\n-        }.getType();\n-        return new Gson().fromJson(content, setType);\n-    }\n-\n-    String getProtocol(URL url) {\n-        String protocol = url.getParameter(SIDE_KEY);\n-        protocol = protocol == null ? url.getProtocol() : protocol;\n-        return protocol;\n-    }\n-\n-    /**\n-     * @return if need to continue\n-     */\n-    public boolean retry() {\n-        return doHandleMetadataCollection(failedReports);\n-    }\n-\n-    private boolean doHandleMetadataCollection(Map<MetadataIdentifier, Object> metadataMap) {\n-        if (metadataMap.isEmpty()) {\n-            return true;\n-        }\n-        Iterator<Map.Entry<MetadataIdentifier, Object>> iterable = metadataMap.entrySet().iterator();\n-        while (iterable.hasNext()) {\n-            Map.Entry<MetadataIdentifier, Object> item = iterable.next();\n-            if (PROVIDER_SIDE.equals(item.getKey().getSide())) {\n-                this.storeProviderMetadata(item.getKey(), (FullServiceDefinition) item.getValue());\n-            } else if (CONSUMER_SIDE.equals(item.getKey().getSide())) {\n-                this.storeConsumerMetadata(item.getKey(), (Map) item.getValue());\n-            }\n-\n-        }\n-        return false;\n-    }\n-\n-    /**\n-     * not private. just for unittest.\n-     */\n-    void publishAll() {\n-        logger.info(\"start to publish all metadata.\");\n-        this.doHandleMetadataCollection(allMetadataReports);\n-    }\n-\n-    /**\n-     * between 2:00 am to 6:00 am, the time is random.\n-     *\n-     * @return\n-     */\n-    long calculateStartTime() {\n-        Calendar calendar = Calendar.getInstance();\n-        long nowMill = calendar.getTimeInMillis();\n-        calendar.set(Calendar.HOUR_OF_DAY, 0);\n-        calendar.set(Calendar.MINUTE, 0);\n-        calendar.set(Calendar.SECOND, 0);\n-        calendar.set(Calendar.MILLISECOND, 0);\n-        long subtract = calendar.getTimeInMillis() + ONE_DAY_IN_MILLISECONDS - nowMill;\n-        return subtract + (FOUR_HOURS_IN_MILLISECONDS / 2) + ThreadLocalRandom.current().nextInt(FOUR_HOURS_IN_MILLISECONDS);\n-    }\n-\n-    class MetadataReportRetry {\n-        protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-        final ScheduledExecutorService retryExecutor = Executors.newScheduledThreadPool(0, new NamedThreadFactory(\"DubboMetadataReportRetryTimer\", true));\n-        volatile ScheduledFuture retryScheduledFuture;\n-        final AtomicInteger retryCounter = new AtomicInteger(0);\n-        // retry task schedule period\n-        long retryPeriod;\n-        // if no failed report, wait how many times to run retry task.\n-        int retryTimesIfNonFail = 600;\n-\n-        int retryLimit;\n-\n-        public MetadataReportRetry(int retryTimes, int retryPeriod) {\n-            this.retryPeriod = retryPeriod;\n-            this.retryLimit = retryTimes;\n-        }\n-\n-        void startRetryTask() {\n-            if (retryScheduledFuture == null) {\n-                synchronized (retryCounter) {\n-                    if (retryScheduledFuture == null) {\n-                        retryScheduledFuture = retryExecutor.scheduleWithFixedDelay(new Runnable() {\n-                            @Override\n-                            public void run() {\n-                                // Check and connect to the metadata\n-                                try {\n-                                    int times = retryCounter.incrementAndGet();\n-                                    logger.info(\"start to retry task for metadata report. retry times:\" + times);\n-                                    if (retry() && times > retryTimesIfNonFail) {\n-                                        cancelRetryTask();\n-                                    }\n-                                    if (times > retryLimit) {\n-                                        cancelRetryTask();\n-                                    }\n-                                } catch (Throwable t) { // Defensive fault tolerance\n-                                    logger.error(\"Unexpected error occur at failed retry, cause: \" + t.getMessage(), t);\n-                                }\n-                            }\n-                        }, 500, retryPeriod, TimeUnit.MILLISECONDS);\n-                    }\n-                }\n-            }\n-        }\n-\n-        void cancelRetryTask() {\n-            retryScheduledFuture.cancel(false);\n-            retryExecutor.shutdown();\n-        }\n-    }\n-\n-    private void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, List<String> urls) {\n-        if (CollectionUtils.isEmpty(urls)) {\n-            return;\n-        }\n-        List<String> encodedUrlList = new ArrayList<>(urls.size());\n-        for (String url : urls) {\n-            encodedUrlList.add(URL.encode(url));\n-        }\n-        doSaveSubscriberData(subscriberMetadataIdentifier, encodedUrlList);\n-    }\n-\n-    protected abstract void doStoreProviderMetadata(MetadataIdentifier providerMetadataIdentifier, String serviceDefinitions);\n-\n-    protected abstract void doStoreConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, String serviceParameterString);\n-\n-    protected abstract void doSaveMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\n-\n-    protected abstract void doRemoveMetadata(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    protected abstract List<String> doGetExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    protected abstract void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, String urlListStr);\n-\n-    protected abstract String doGetSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.support;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.ConfigUtils;\r\n+import org.apache.dubbo.common.utils.NamedThreadFactory;\r\n+import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+import org.apache.dubbo.metadata.report.MetadataReport;\r\n+import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;\r\n+import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\r\n+\r\n+import com.google.gson.Gson;\r\n+import com.google.gson.reflect.TypeToken;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileInputStream;\r\n+import java.io.FileOutputStream;\r\n+import java.io.IOException;\r\n+import java.io.InputStream;\r\n+import java.io.RandomAccessFile;\r\n+import java.lang.reflect.Type;\r\n+import java.nio.channels.FileChannel;\r\n+import java.nio.channels.FileLock;\r\n+import java.util.ArrayList;\r\n+import java.util.Calendar;\r\n+import java.util.Iterator;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Properties;\r\n+import java.util.Set;\r\n+import java.util.SortedSet;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.concurrent.Executors;\r\n+import java.util.concurrent.ScheduledExecutorService;\r\n+import java.util.concurrent.ScheduledFuture;\r\n+import java.util.concurrent.ThreadLocalRandom;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+import java.util.concurrent.atomic.AtomicLong;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.CYCLE_REPORT_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_CYCLE_REPORT;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_PERIOD;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_TIMES;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.RETRY_PERIOD_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.RETRY_TIMES_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.SYNC_REPORT_KEY;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+public abstract class AbstractMetadataReport implements MetadataReport {\r\n+\r\n+    protected final static String DEFAULT_ROOT = \"dubbo\";\r\n+\r\n+    private static final int ONE_DAY_IN_MILLISECONDS = 60 * 24 * 60 * 1000;\r\n+    private static final int FOUR_HOURS_IN_MILLISECONDS = 60 * 4 * 60 * 1000;\r\n+    // Log output\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    // Local disk cache, where the special key value.registries records the list of metadata centers, and the others are the list of notified service providers\r\n+    final Properties properties = new Properties();\r\n+    private final ExecutorService reportCacheExecutor = Executors.newFixedThreadPool(1, new NamedThreadFactory(\"DubboSaveMetadataReport\", true));\r\n+    final Map<MetadataIdentifier, Object> allMetadataReports = new ConcurrentHashMap<>(4);\r\n+\r\n+    private final AtomicLong lastCacheChanged = new AtomicLong();\r\n+    final Map<MetadataIdentifier, Object> failedReports = new ConcurrentHashMap<>(4);\r\n+    private URL reportURL;\r\n+    boolean syncReport;\r\n+    // Local disk cache file\r\n+    File file;\r\n+    private AtomicBoolean initialized = new AtomicBoolean(false);\r\n+    public MetadataReportRetry metadataReportRetry;\r\n+\r\n+    public AbstractMetadataReport(URL reportServerURL) {\r\n+        setUrl(reportServerURL);\r\n+        // Start file save timer\r\n+        String defaultFilename = System.getProperty(\"user.home\") + \"/.dubbo/dubbo-metadata-\" + reportServerURL.getParameter(APPLICATION_KEY) + \"-\" + reportServerURL.getAddress().replaceAll(\":\", \"-\") + \".cache\";\r\n+        String filename = reportServerURL.getParameter(FILE_KEY, defaultFilename);\r\n+        File file = null;\r\n+        if (ConfigUtils.isNotEmpty(filename)) {\r\n+            file = new File(filename);\r\n+            if (!file.exists() && file.getParentFile() != null && !file.getParentFile().exists()) {\r\n+                if (!file.getParentFile().mkdirs()) {\r\n+                    throw new IllegalArgumentException(\"Invalid service store file \" + file + \", cause: Failed to create directory \" + file.getParentFile() + \"!\");\r\n+                }\r\n+            }\r\n+            // if this file exist, firstly delete it.\r\n+            if (!initialized.getAndSet(true) && file.exists()) {\r\n+                file.delete();\r\n+            }\r\n+        }\r\n+        this.file = file;\r\n+        loadProperties();\r\n+        syncReport = reportServerURL.getParameter(SYNC_REPORT_KEY, false);\r\n+        metadataReportRetry = new MetadataReportRetry(reportServerURL.getParameter(RETRY_TIMES_KEY, DEFAULT_METADATA_REPORT_RETRY_TIMES),\r\n+                reportServerURL.getParameter(RETRY_PERIOD_KEY, DEFAULT_METADATA_REPORT_RETRY_PERIOD));\r\n+        // cycle report the data switch\r\n+        if (reportServerURL.getParameter(CYCLE_REPORT_KEY, DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {\r\n+            ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"DubboMetadataReportTimer\", true));\r\n+            scheduler.scheduleAtFixedRate(this::publishAll, calculateStartTime(), ONE_DAY_IN_MILLISECONDS, TimeUnit.MILLISECONDS);\r\n+        }\r\n+    }\r\n+\r\n+    public URL getUrl() {\r\n+        return reportURL;\r\n+    }\r\n+\r\n+    protected void setUrl(URL url) {\r\n+        if (url == null) {\r\n+            throw new IllegalArgumentException(\"metadataReport url == null\");\r\n+        }\r\n+        this.reportURL = url;\r\n+    }\r\n+\r\n+    private void doSaveProperties(long version) {\r\n+        if (version < lastCacheChanged.get()) {\r\n+            return;\r\n+        }\r\n+        if (file == null) {\r\n+            return;\r\n+        }\r\n+        // Save\r\n+        try {\r\n+            File lockfile = new File(file.getAbsolutePath() + \".lock\");\r\n+            if (!lockfile.exists()) {\r\n+                lockfile.createNewFile();\r\n+            }\r\n+            try (RandomAccessFile raf = new RandomAccessFile(lockfile, \"rw\");\r\n+                 FileChannel channel = raf.getChannel()) {\r\n+                FileLock lock = channel.tryLock();\r\n+                if (lock == null) {\r\n+                    throw new IOException(\"Can not lock the metadataReport cache file \" + file.getAbsolutePath() + \", ignore and retry later, maybe multi java process use the file, please config: dubbo.metadata.file=xxx.properties\");\r\n+                }\r\n+                // Save\r\n+                try {\r\n+                    if (!file.exists()) {\r\n+                        file.createNewFile();\r\n+                    }\r\n+                    try (FileOutputStream outputFile = new FileOutputStream(file)) {\r\n+                        properties.store(outputFile, \"Dubbo metadataReport Cache\");\r\n+                    }\r\n+                } finally {\r\n+                    lock.release();\r\n+                }\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            if (version < lastCacheChanged.get()) {\r\n+                return;\r\n+            } else {\r\n+                reportCacheExecutor.execute(new SaveProperties(lastCacheChanged.incrementAndGet()));\r\n+            }\r\n+            logger.warn(\"Failed to save service store file, cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    void loadProperties() {\r\n+        if (file != null && file.exists()) {\r\n+            try (InputStream in = new FileInputStream(file)) {\r\n+                properties.load(in);\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Load service store file \" + file + \", data: \" + properties);\r\n+                }\r\n+            } catch (Throwable e) {\r\n+                logger.warn(\"Failed to load service store file \" + file, e);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void saveProperties(MetadataIdentifier metadataIdentifier, String value, boolean add, boolean sync) {\r\n+        if (file == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        try {\r\n+            if (add) {\r\n+                properties.setProperty(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY), value);\r\n+            } else {\r\n+                properties.remove(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));\r\n+            }\r\n+            long version = lastCacheChanged.incrementAndGet();\r\n+            if (sync) {\r\n+                new SaveProperties(version).run();\r\n+            } else {\r\n+                reportCacheExecutor.execute(new SaveProperties(version));\r\n+            }\r\n+\r\n+        } catch (Throwable t) {\r\n+            logger.warn(t.getMessage(), t);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return getUrl().toString();\r\n+    }\r\n+\r\n+    private class SaveProperties implements Runnable {\r\n+        private long version;\r\n+\r\n+        private SaveProperties(long version) {\r\n+            this.version = version;\r\n+        }\r\n+\r\n+        @Override\r\n+        public void run() {\r\n+            doSaveProperties(version);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\r\n+        if (syncReport) {\r\n+            storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition));\r\n+        }\r\n+    }\r\n+\r\n+    private void storeProviderMetadataTask(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\r\n+        try {\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"store provider metadata. Identifier : \" + providerMetadataIdentifier + \"; definition: \" + serviceDefinition);\r\n+            }\r\n+            allMetadataReports.put(providerMetadataIdentifier, serviceDefinition);\r\n+            failedReports.remove(providerMetadataIdentifier);\r\n+            Gson gson = new Gson();\r\n+            String data = gson.toJson(serviceDefinition);\r\n+            doStoreProviderMetadata(providerMetadataIdentifier, data);\r\n+            saveProperties(providerMetadataIdentifier, data, true, !syncReport);\r\n+        } catch (Exception e) {\r\n+            // retry again. If failed again, throw exception.\r\n+            failedReports.put(providerMetadataIdentifier, serviceDefinition);\r\n+            metadataReportRetry.startRetryTask();\r\n+            logger.error(\"Failed to put provider metadata \" + providerMetadataIdentifier + \" in  \" + serviceDefinition + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\r\n+        if (syncReport) {\r\n+            storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap));\r\n+        }\r\n+    }\r\n+\r\n+    public void storeConsumerMetadataTask(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\r\n+        try {\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"store consumer metadata. Identifier : \" + consumerMetadataIdentifier + \"; definition: \" + serviceParameterMap);\r\n+            }\r\n+            allMetadataReports.put(consumerMetadataIdentifier, serviceParameterMap);\r\n+            failedReports.remove(consumerMetadataIdentifier);\r\n+\r\n+            Gson gson = new Gson();\r\n+            String data = gson.toJson(serviceParameterMap);\r\n+            doStoreConsumerMetadata(consumerMetadataIdentifier, data);\r\n+            saveProperties(consumerMetadataIdentifier, data, true, !syncReport);\r\n+        } catch (Exception e) {\r\n+            // retry again. If failed again, throw exception.\r\n+            failedReports.put(consumerMetadataIdentifier, serviceParameterMap);\r\n+            metadataReportRetry.startRetryTask();\r\n+            logger.error(\"Failed to put consumer metadata \" + consumerMetadataIdentifier + \";  \" + serviceParameterMap + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {\r\n+        if (syncReport) {\r\n+            doSaveMetadata(metadataIdentifier, url);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> doSaveMetadata(metadataIdentifier, url));\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {\r\n+        if (syncReport) {\r\n+            doRemoveMetadata(metadataIdentifier);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> doRemoveMetadata(metadataIdentifier));\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {\r\n+        // TODO, fallback to local cache\r\n+        return doGetExportedURLs(metadataIdentifier);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {\r\n+        if (syncReport) {\r\n+            doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls));\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls)));\r\n+        }\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {\r\n+        String content = doGetSubscribedURLs(subscriberMetadataIdentifier);\r\n+        Type setType = new TypeToken<SortedSet<String>>() {\r\n+        }.getType();\r\n+        return new Gson().fromJson(content, setType);\r\n+    }\r\n+\r\n+    String getProtocol(URL url) {\r\n+        String protocol = url.getParameter(SIDE_KEY);\r\n+        protocol = protocol == null ? url.getProtocol() : protocol;\r\n+        return protocol;\r\n+    }\r\n+\r\n+    /**\r\n+     * @return if need to continue\r\n+     */\r\n+    public boolean retry() {\r\n+        return doHandleMetadataCollection(failedReports);\r\n+    }\r\n+\r\n+    private boolean doHandleMetadataCollection(Map<MetadataIdentifier, Object> metadataMap) {\r\n+        if (metadataMap.isEmpty()) {\r\n+            return true;\r\n+        }\r\n+        Iterator<Map.Entry<MetadataIdentifier, Object>> iterable = metadataMap.entrySet().iterator();\r\n+        while (iterable.hasNext()) {\r\n+            Map.Entry<MetadataIdentifier, Object> item = iterable.next();\r\n+            if (PROVIDER_SIDE.equals(item.getKey().getSide())) {\r\n+                this.storeProviderMetadata(item.getKey(), (FullServiceDefinition) item.getValue());\r\n+            } else if (CONSUMER_SIDE.equals(item.getKey().getSide())) {\r\n+                this.storeConsumerMetadata(item.getKey(), (Map) item.getValue());\r\n+            }\r\n+\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    /**\r\n+     * not private. just for unittest.\r\n+     */\r\n+    void publishAll() {\r\n+        logger.info(\"start to publish all metadata.\");\r\n+        this.doHandleMetadataCollection(allMetadataReports);\r\n+    }\r\n+\r\n+    /**\r\n+     * between 2:00 am to 6:00 am, the time is random.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    long calculateStartTime() {\r\n+        Calendar calendar = Calendar.getInstance();\r\n+        long nowMill = calendar.getTimeInMillis();\r\n+        calendar.set(Calendar.HOUR_OF_DAY, 0);\r\n+        calendar.set(Calendar.MINUTE, 0);\r\n+        calendar.set(Calendar.SECOND, 0);\r\n+        calendar.set(Calendar.MILLISECOND, 0);\r\n+        long subtract = calendar.getTimeInMillis() + ONE_DAY_IN_MILLISECONDS - nowMill;\r\n+        return subtract + (FOUR_HOURS_IN_MILLISECONDS / 2) + ThreadLocalRandom.current().nextInt(FOUR_HOURS_IN_MILLISECONDS);\r\n+    }\r\n+\r\n+    class MetadataReportRetry {\r\n+        protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+        final ScheduledExecutorService retryExecutor = Executors.newScheduledThreadPool(0, new NamedThreadFactory(\"DubboMetadataReportRetryTimer\", true));\r\n+        volatile ScheduledFuture retryScheduledFuture;\r\n+        final AtomicInteger retryCounter = new AtomicInteger(0);\r\n+        // retry task schedule period\r\n+        long retryPeriod;\r\n+        // if no failed report, wait how many times to run retry task.\r\n+        int retryTimesIfNonFail = 600;\r\n+\r\n+        int retryLimit;\r\n+\r\n+        public MetadataReportRetry(int retryTimes, int retryPeriod) {\r\n+            this.retryPeriod = retryPeriod;\r\n+            this.retryLimit = retryTimes;\r\n+        }\r\n+\r\n+        void startRetryTask() {\r\n+            if (retryScheduledFuture == null) {\r\n+                synchronized (retryCounter) {\r\n+                    if (retryScheduledFuture == null) {\r\n+                        retryScheduledFuture = retryExecutor.scheduleWithFixedDelay(new Runnable() {\r\n+                            @Override\r\n+                            public void run() {\r\n+                                // Check and connect to the metadata\r\n+                                try {\r\n+                                    int times = retryCounter.incrementAndGet();\r\n+                                    logger.info(\"start to retry task for metadata report. retry times:\" + times);\r\n+                                    if (retry() && times > retryTimesIfNonFail) {\r\n+                                        cancelRetryTask();\r\n+                                    }\r\n+                                    if (times > retryLimit) {\r\n+                                        cancelRetryTask();\r\n+                                    }\r\n+                                } catch (Throwable t) { // Defensive fault tolerance\r\n+                                    logger.error(\"Unexpected error occur at failed retry, cause: \" + t.getMessage(), t);\r\n+                                }\r\n+                            }\r\n+                        }, 500, retryPeriod, TimeUnit.MILLISECONDS);\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        void cancelRetryTask() {\r\n+            retryScheduledFuture.cancel(false);\r\n+            retryExecutor.shutdown();\r\n+        }\r\n+    }\r\n+\r\n+    private void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, List<String> urls) {\r\n+        if (CollectionUtils.isEmpty(urls)) {\r\n+            return;\r\n+        }\r\n+        List<String> encodedUrlList = new ArrayList<>(urls.size());\r\n+        for (String url : urls) {\r\n+            encodedUrlList.add(URL.encode(url));\r\n+        }\r\n+        doSaveSubscriberData(subscriberMetadataIdentifier, encodedUrlList);\r\n+    }\r\n+\r\n+    protected abstract void doStoreProviderMetadata(MetadataIdentifier providerMetadataIdentifier, String serviceDefinitions);\r\n+\r\n+    protected abstract void doStoreConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, String serviceParameterString);\r\n+\r\n+    protected abstract void doSaveMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\r\n+\r\n+    protected abstract void doRemoveMetadata(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    protected abstract List<String> doGetExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    protected abstract void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, String urlListStr);\r\n+\r\n+    protected abstract String doGetSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java", "source2": "org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,62 +1,62 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.support;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.metadata.report.MetadataReport;\n-import org.apache.dubbo.metadata.report.MetadataReportFactory;\n-\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.locks.ReentrantLock;\n-\n-public abstract class AbstractMetadataReportFactory implements MetadataReportFactory {\n-    private static final String EXPORT_KEY = \"export\";\n-    private static final String REFER_KEY = \"refer\";\n-\n-    // The lock for the acquisition process of the registry\n-    private static final ReentrantLock LOCK = new ReentrantLock();\n-\n-    // Registry Collection Map<metadataAddress, MetadataReport>\n-    private static final Map<String, MetadataReport> SERVICE_STORE_MAP = new ConcurrentHashMap<String, MetadataReport>();\n-\n-    @Override\n-    public MetadataReport getMetadataReport(URL url) {\n-        url = url.setPath(MetadataReport.class.getName())\n-                .removeParameters(EXPORT_KEY, REFER_KEY);\n-        String key = url.toServiceString();\n-        // Lock the metadata access process to ensure a single instance of the metadata instance\n-        LOCK.lock();\n-        try {\n-            MetadataReport metadataReport = SERVICE_STORE_MAP.get(key);\n-            if (metadataReport != null) {\n-                return metadataReport;\n-            }\n-            metadataReport = createMetadataReport(url);\n-            if (metadataReport == null) {\n-                throw new IllegalStateException(\"Can not create metadata Report \" + url);\n-            }\n-            SERVICE_STORE_MAP.put(key, metadataReport);\n-            return metadataReport;\n-        } finally {\n-            // Release the lock\n-            LOCK.unlock();\n-        }\n-    }\n-\n-    protected abstract MetadataReport createMetadataReport(URL url);\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.report.support;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.metadata.report.MetadataReport;\r\n+import org.apache.dubbo.metadata.report.MetadataReportFactory;\r\n+\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.locks.ReentrantLock;\r\n+\r\n+public abstract class AbstractMetadataReportFactory implements MetadataReportFactory {\r\n+    private static final String EXPORT_KEY = \"export\";\r\n+    private static final String REFER_KEY = \"refer\";\r\n+\r\n+    // The lock for the acquisition process of the registry\r\n+    private static final ReentrantLock LOCK = new ReentrantLock();\r\n+\r\n+    // Registry Collection Map<metadataAddress, MetadataReport>\r\n+    private static final Map<String, MetadataReport> SERVICE_STORE_MAP = new ConcurrentHashMap<String, MetadataReport>();\r\n+\r\n+    @Override\r\n+    public MetadataReport getMetadataReport(URL url) {\r\n+        url = url.setPath(MetadataReport.class.getName())\r\n+                .removeParameters(EXPORT_KEY, REFER_KEY);\r\n+        String key = url.toServiceString();\r\n+        // Lock the metadata access process to ensure a single instance of the metadata instance\r\n+        LOCK.lock();\r\n+        try {\r\n+            MetadataReport metadataReport = SERVICE_STORE_MAP.get(key);\r\n+            if (metadataReport != null) {\r\n+                return metadataReport;\r\n+            }\r\n+            metadataReport = createMetadataReport(url);\r\n+            if (metadataReport == null) {\r\n+                throw new IllegalStateException(\"Can not create metadata Report \" + url);\r\n+            }\r\n+            SERVICE_STORE_MAP.put(key, metadataReport);\r\n+            return metadataReport;\r\n+        } finally {\r\n+            // Release the lock\r\n+            LOCK.unlock();\r\n+        }\r\n+    }\r\n+\r\n+    protected abstract MetadataReport createMetadataReport(URL url);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/support/Constants.java", "source2": "org/apache/dubbo/metadata/report/support/Constants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,36 +1,36 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package org.apache.dubbo.metadata.report.support;\n-\n-public interface Constants {\n-    String METADATA_REPORT_KEY = \"metadata\";\n-\n-    String RETRY_TIMES_KEY = \"retry.times\";\n-\n-    Integer DEFAULT_METADATA_REPORT_RETRY_TIMES = 100;\n-\n-    String RETRY_PERIOD_KEY = \"retry.period\";\n-\n-    Integer DEFAULT_METADATA_REPORT_RETRY_PERIOD = 3000;\n-\n-    String SYNC_REPORT_KEY = \"sync.report\";\n-\n-    String CYCLE_REPORT_KEY = \"cycle.report\";\n-\n-    Boolean DEFAULT_METADATA_REPORT_CYCLE_REPORT = true;\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.metadata.report.support;\r\n+\r\n+public interface Constants {\r\n+    String METADATA_REPORT_KEY = \"metadata\";\r\n+\r\n+    String RETRY_TIMES_KEY = \"retry.times\";\r\n+\r\n+    Integer DEFAULT_METADATA_REPORT_RETRY_TIMES = 100;\r\n+\r\n+    String RETRY_PERIOD_KEY = \"retry.period\";\r\n+\r\n+    Integer DEFAULT_METADATA_REPORT_RETRY_PERIOD = 3000;\r\n+\r\n+    String SYNC_REPORT_KEY = \"sync.report\";\r\n+\r\n+    String CYCLE_REPORT_KEY = \"cycle.report\";\r\n+\r\n+    Boolean DEFAULT_METADATA_REPORT_CYCLE_REPORT = true;\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,51 +1,51 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Parameter;\n-\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\n-import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\n-                        Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata) {\n-        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\n-        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\n-        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\n-    }\n-\n-    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        return getValue(annotation);\n-    }\n-\n-    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        return buildDefaultValue(parameterIndex);\n-    }\n-\n-    protected abstract void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\n-                                    int parameterIndex, Method method, RestMethodMetadata restMethodMetadata);\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Parameter;\r\n+\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\r\n+import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\r\n+                        Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata) {\r\n+        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\r\n+        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\r\n+        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\r\n+    }\r\n+\r\n+    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        return buildDefaultValue(parameterIndex);\r\n+    }\r\n+\r\n+    protected abstract void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\r\n+                                    int parameterIndex, Method method, RestMethodMetadata restMethodMetadata);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,343 +1,343 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import org.apache.dubbo.common.utils.MethodComparator;\n-import org.apache.dubbo.common.utils.ServiceAnnotationResolver;\n-import org.apache.dubbo.config.annotation.DubboService;\n-import org.apache.dubbo.config.annotation.Service;\n-import org.apache.dubbo.metadata.definition.MethodDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Parameter;\n-import java.util.ArrayList;\n-import java.util.LinkedHashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.function.Consumer;\n-\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.sort;\n-import static java.util.Collections.unmodifiableMap;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.common.function.ThrowableFunction.execute;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.isAnyAnnotationPresent;\n-import static org.apache.dubbo.common.utils.ClassUtils.forName;\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\n-import static org.apache.dubbo.common.utils.MethodUtils.excludedDeclaredClass;\n-import static org.apache.dubbo.common.utils.MethodUtils.getAllMethods;\n-import static org.apache.dubbo.common.utils.MethodUtils.overrides;\n-\n-/**\n- * The abstract {@link ServiceRestMetadataResolver} class to provider some template methods assemble the instance of\n- * {@link ServiceRestMetadata} will extended by the sub-classes.\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\n-\n-    private final Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap;\n-\n-    public AbstractServiceRestMetadataResolver() {\n-        this.parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\n-    }\n-\n-    @Override\n-    public final boolean supports(Class<?> serviceType) {\n-        return isImplementedInterface(serviceType) && isServiceAnnotationPresent(serviceType) && supports0(serviceType);\n-    }\n-\n-    protected final boolean isImplementedInterface(Class<?> serviceType) {\n-        return !getAllInterfaces(serviceType).isEmpty();\n-    }\n-\n-    protected final boolean isServiceAnnotationPresent(Class<?> serviceType) {\n-        return isAnyAnnotationPresent(serviceType, DubboService.class, Service.class,\n-                com.alibaba.dubbo.config.annotation.Service.class);\n-    }\n-\n-    /**\n-     * internal support method\n-     *\n-     * @param serviceType Dubbo Service interface or type\n-     * @return If supports, return <code>true</code>, or <code>false</code>\n-     */\n-    protected abstract boolean supports0(Class<?> serviceType);\n-\n-    @Override\n-    public final ServiceRestMetadata resolve(Class<?> serviceType) {\n-\n-        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\n-\n-        // Process ServiceRestMetadata\n-        processServiceRestMetadata(serviceRestMetadata, serviceType);\n-\n-        // Process RestMethodMetadata\n-        processAllRestMethodMetadata(serviceRestMetadata, serviceType);\n-\n-        return serviceRestMetadata;\n-    }\n-\n-    /**\n-     * Process the service type including the sub-routines:\n-     * <ul>\n-     *     <li>{@link ServiceRestMetadata#setServiceInterface(String)}</li>\n-     *     <li>{@link ServiceRestMetadata#setVersion(String)}</li>\n-     *     <li>{@link ServiceRestMetadata#setGroup(String)}</li>\n-     * </ul>\n-     *\n-     * @param serviceRestMetadata {@link ServiceRestMetadata}\n-     * @param serviceType         Dubbo Service interface or type\n-     */\n-    protected void processServiceRestMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\n-        ServiceAnnotationResolver resolver = new ServiceAnnotationResolver(serviceType);\n-        serviceRestMetadata.setServiceInterface(resolver.resolveInterfaceClassName());\n-        serviceRestMetadata.setVersion(resolver.resolveVersion());\n-        serviceRestMetadata.setGroup(resolver.resolveGroup());\n-    }\n-\n-    /**\n-     * Process all {@link RestMethodMetadata}\n-     *\n-     * @param serviceRestMetadata {@link ServiceRestMetadata}\n-     * @param serviceType         Dubbo Service interface or type\n-     */\n-    protected void processAllRestMethodMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\n-        Class<?> serviceInterfaceClass = resolveServiceInterfaceClass(serviceRestMetadata, serviceType);\n-        Map<Method, Method> serviceMethodsMap = resolveServiceMethodsMap(serviceType, serviceInterfaceClass);\n-        for (Map.Entry<Method, Method> entry : serviceMethodsMap.entrySet()) {\n-            // try the overrider method first\n-            Method serviceMethod = entry.getKey();\n-            // If failed, it indicates the overrider method does not contain metadata , then try the declared method\n-            if (!processRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, serviceRestMetadata.getMeta()::add)) {\n-                Method declaredServiceMethod = entry.getValue();\n-                processRestMethodMetadata(declaredServiceMethod, serviceType, serviceInterfaceClass,\n-                        serviceRestMetadata.getMeta()::add);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * Resolve a map of all public services methods from the specified service type and its interface class, whose key is the\n-     * declared method, and the value is the overrider method\n-     *\n-     * @param serviceType           the service interface implementation class\n-     * @param serviceInterfaceClass the service interface class\n-     * @return non-null read-only {@link Map}\n-     */\n-    protected Map<Method, Method> resolveServiceMethodsMap(Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Map<Method, Method> serviceMethodsMap = new LinkedHashMap<>();\n-        // exclude the public methods declared in java.lang.Object.class\n-        List<Method> declaredServiceMethods = new ArrayList<>(getAllMethods(serviceInterfaceClass, excludedDeclaredClass(Object.class)));\n-        List<Method> serviceMethods = new ArrayList<>(getAllMethods(serviceType, excludedDeclaredClass(Object.class)));\n-\n-        // sort methods\n-        sort(declaredServiceMethods, MethodComparator.INSTANCE);\n-        sort(serviceMethods, MethodComparator.INSTANCE);\n-\n-        for (Method declaredServiceMethod : declaredServiceMethods) {\n-            for (Method serviceMethod : serviceMethods) {\n-                if (overrides(serviceMethod, declaredServiceMethod)) {\n-                    serviceMethodsMap.put(serviceMethod, declaredServiceMethod);\n-                    continue;\n-                }\n-            }\n-        }\n-        // make them to be read-only\n-        return unmodifiableMap(serviceMethodsMap);\n-    }\n-\n-    /**\n-     * Resolve the class of Dubbo Service interface\n-     *\n-     * @param serviceRestMetadata {@link ServiceRestMetadata}\n-     * @param serviceType         Dubbo Service interface or type\n-     * @return non-null\n-     * @throws RuntimeException If the class is not found, the {@link RuntimeException} wraps the cause will be thrown\n-     */\n-    protected Class<?> resolveServiceInterfaceClass(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\n-        return execute(serviceType.getClassLoader(), classLoader -> {\n-            String serviceInterface = serviceRestMetadata.getServiceInterface();\n-            return forName(serviceInterface, classLoader);\n-        });\n-    }\n-\n-    /**\n-     * Process the single {@link RestMethodMetadata} by the specified {@link Consumer} if present\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @param metadataToProcess     {@link RestMethodMetadata} to process if present\n-     * @return if processed successfully, return <code>true</code>, or <code>false</code>\n-     */\n-    protected boolean processRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\n-                                                Class<?> serviceInterfaceClass,\n-                                                Consumer<RestMethodMetadata> metadataToProcess) {\n-\n-        if (!isRestCapableMethod(serviceMethod, serviceType, serviceInterfaceClass)) {\n-            return false;\n-        }\n-\n-        String requestPath = resolveRequestPath(serviceMethod, serviceType, serviceInterfaceClass); // requestPath is required\n-\n-        if (requestPath == null) {\n-            return false;\n-        }\n-\n-        String requestMethod = resolveRequestMethod(serviceMethod, serviceType, serviceInterfaceClass); // requestMethod is required\n-\n-        if (requestMethod == null) {\n-            return false;\n-        }\n-\n-        RestMethodMetadata metadata = new RestMethodMetadata();\n-\n-        MethodDefinition methodDefinition = resolveMethodDefinition(serviceMethod, serviceType, serviceInterfaceClass);\n-        // Set MethodDefinition\n-        metadata.setMethod(methodDefinition);\n-\n-        // process the annotated method parameters\n-        processAnnotatedMethodParameters(serviceMethod, serviceType, serviceInterfaceClass, metadata);\n-\n-        // process produces\n-        Set<String> produces = new LinkedHashSet<>();\n-        processProduces(serviceMethod, serviceType, serviceInterfaceClass, produces);\n-\n-        // process consumes\n-        Set<String> consumes = new LinkedHashSet<>();\n-        processConsumes(serviceMethod, serviceType, serviceInterfaceClass, consumes);\n-\n-        // Initialize RequestMetadata\n-        RequestMetadata request = metadata.getRequest();\n-        request.setPath(requestPath);\n-        request.setMethod(requestMethod);\n-        request.setProduces(produces);\n-        request.setConsumes(consumes);\n-\n-        // Post-Process\n-        postResolveRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, metadata);\n-\n-        // Accept RestMethodMetadata\n-        metadataToProcess.accept(metadata);\n-\n-        return true;\n-    }\n-\n-    /**\n-     * Test the service method is capable of REST or not?\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return If capable, return <code>true</code>\n-     */\n-    protected abstract boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass);\n-\n-    /**\n-     * Resolve the request method\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return if can't be resolve, return <code>null</code>\n-     */\n-    protected abstract String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass);\n-\n-    /**\n-     * Resolve the request path\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return if can't be resolve, return <code>null</code>\n-     */\n-    protected abstract String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass);\n-\n-    /**\n-     * Resolve the {@link MethodDefinition}\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return if can't be resolve, return <code>null</code>\n-     * @see MethodDefinitionBuilder\n-     */\n-    protected MethodDefinition resolveMethodDefinition(Method serviceMethod, Class<?> serviceType,\n-                                                       Class<?> serviceInterfaceClass) {\n-        MethodDefinitionBuilder builder = new MethodDefinitionBuilder();\n-        return builder.build(serviceMethod);\n-    }\n-\n-    private void processAnnotatedMethodParameters(Method serviceMethod, Class<?> serviceType,\n-                                                  Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\n-        int paramCount = serviceMethod.getParameterCount();\n-        Parameter[] parameters = serviceMethod.getParameters();\n-        for (int i = 0; i < paramCount; i++) {\n-            Parameter parameter = parameters[i];\n-            // Add indexed parameter name\n-            metadata.addIndexToName(i, parameter.getName());\n-            processAnnotatedMethodParameter(parameter, i, serviceMethod, serviceType, serviceInterfaceClass, metadata);\n-        }\n-    }\n-\n-    private void processAnnotatedMethodParameter(Parameter parameter, int parameterIndex, Method serviceMethod,\n-                                                 Class<?> serviceType, Class<?> serviceInterfaceClass,\n-                                                 RestMethodMetadata metadata) {\n-        Annotation[] annotations = parameter.getAnnotations();\n-        for (Annotation annotation : annotations) {\n-            String annotationType = annotation.annotationType().getName();\n-            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\n-                    .forEach(processor -> {\n-                        processor.process(annotation, parameter, parameterIndex, serviceMethod, serviceType,\n-                                serviceInterfaceClass, metadata);\n-                    });\n-        }\n-    }\n-\n-    protected abstract void processProduces(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass,\n-                                            Set<String> produces);\n-\n-    protected abstract void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass,\n-                                            Set<String> consumes);\n-\n-    protected void postResolveRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\n-                                                 Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\n-    }\n-\n-    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\n-        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\n-        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\n-                .getSupportedExtensionInstances()\n-                .forEach(processor -> {\n-                    List<AnnotatedMethodParameterProcessor> processors =\n-                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\n-                    processors.add(processor);\n-                });\n-        return parameterProcessorsMap;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import org.apache.dubbo.common.utils.MethodComparator;\r\n+import org.apache.dubbo.common.utils.ServiceAnnotationResolver;\r\n+import org.apache.dubbo.config.annotation.DubboService;\r\n+import org.apache.dubbo.config.annotation.Service;\r\n+import org.apache.dubbo.metadata.definition.MethodDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Parameter;\r\n+import java.util.ArrayList;\r\n+import java.util.LinkedHashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.function.Consumer;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.sort;\r\n+import static java.util.Collections.unmodifiableMap;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.common.function.ThrowableFunction.execute;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.isAnyAnnotationPresent;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.forName;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.excludedDeclaredClass;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.getAllMethods;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.overrides;\r\n+\r\n+/**\r\n+ * The abstract {@link ServiceRestMetadataResolver} class to provider some template methods assemble the instance of\r\n+ * {@link ServiceRestMetadata} will extended by the sub-classes.\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\r\n+\r\n+    private final Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap;\r\n+\r\n+    public AbstractServiceRestMetadataResolver() {\r\n+        this.parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\r\n+    }\r\n+\r\n+    @Override\r\n+    public final boolean supports(Class<?> serviceType) {\r\n+        return isImplementedInterface(serviceType) && isServiceAnnotationPresent(serviceType) && supports0(serviceType);\r\n+    }\r\n+\r\n+    protected final boolean isImplementedInterface(Class<?> serviceType) {\r\n+        return !getAllInterfaces(serviceType).isEmpty();\r\n+    }\r\n+\r\n+    protected final boolean isServiceAnnotationPresent(Class<?> serviceType) {\r\n+        return isAnyAnnotationPresent(serviceType, DubboService.class, Service.class,\r\n+                com.alibaba.dubbo.config.annotation.Service.class);\r\n+    }\r\n+\r\n+    /**\r\n+     * internal support method\r\n+     *\r\n+     * @param serviceType Dubbo Service interface or type\r\n+     * @return If supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    protected abstract boolean supports0(Class<?> serviceType);\r\n+\r\n+    @Override\r\n+    public final ServiceRestMetadata resolve(Class<?> serviceType) {\r\n+\r\n+        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\r\n+\r\n+        // Process ServiceRestMetadata\r\n+        processServiceRestMetadata(serviceRestMetadata, serviceType);\r\n+\r\n+        // Process RestMethodMetadata\r\n+        processAllRestMethodMetadata(serviceRestMetadata, serviceType);\r\n+\r\n+        return serviceRestMetadata;\r\n+    }\r\n+\r\n+    /**\r\n+     * Process the service type including the sub-routines:\r\n+     * <ul>\r\n+     *     <li>{@link ServiceRestMetadata#setServiceInterface(String)}</li>\r\n+     *     <li>{@link ServiceRestMetadata#setVersion(String)}</li>\r\n+     *     <li>{@link ServiceRestMetadata#setGroup(String)}</li>\r\n+     * </ul>\r\n+     *\r\n+     * @param serviceRestMetadata {@link ServiceRestMetadata}\r\n+     * @param serviceType         Dubbo Service interface or type\r\n+     */\r\n+    protected void processServiceRestMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\r\n+        ServiceAnnotationResolver resolver = new ServiceAnnotationResolver(serviceType);\r\n+        serviceRestMetadata.setServiceInterface(resolver.resolveInterfaceClassName());\r\n+        serviceRestMetadata.setVersion(resolver.resolveVersion());\r\n+        serviceRestMetadata.setGroup(resolver.resolveGroup());\r\n+    }\r\n+\r\n+    /**\r\n+     * Process all {@link RestMethodMetadata}\r\n+     *\r\n+     * @param serviceRestMetadata {@link ServiceRestMetadata}\r\n+     * @param serviceType         Dubbo Service interface or type\r\n+     */\r\n+    protected void processAllRestMethodMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\r\n+        Class<?> serviceInterfaceClass = resolveServiceInterfaceClass(serviceRestMetadata, serviceType);\r\n+        Map<Method, Method> serviceMethodsMap = resolveServiceMethodsMap(serviceType, serviceInterfaceClass);\r\n+        for (Map.Entry<Method, Method> entry : serviceMethodsMap.entrySet()) {\r\n+            // try the overrider method first\r\n+            Method serviceMethod = entry.getKey();\r\n+            // If failed, it indicates the overrider method does not contain metadata , then try the declared method\r\n+            if (!processRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, serviceRestMetadata.getMeta()::add)) {\r\n+                Method declaredServiceMethod = entry.getValue();\r\n+                processRestMethodMetadata(declaredServiceMethod, serviceType, serviceInterfaceClass,\r\n+                        serviceRestMetadata.getMeta()::add);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve a map of all public services methods from the specified service type and its interface class, whose key is the\r\n+     * declared method, and the value is the overrider method\r\n+     *\r\n+     * @param serviceType           the service interface implementation class\r\n+     * @param serviceInterfaceClass the service interface class\r\n+     * @return non-null read-only {@link Map}\r\n+     */\r\n+    protected Map<Method, Method> resolveServiceMethodsMap(Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Map<Method, Method> serviceMethodsMap = new LinkedHashMap<>();\r\n+        // exclude the public methods declared in java.lang.Object.class\r\n+        List<Method> declaredServiceMethods = new ArrayList<>(getAllMethods(serviceInterfaceClass, excludedDeclaredClass(Object.class)));\r\n+        List<Method> serviceMethods = new ArrayList<>(getAllMethods(serviceType, excludedDeclaredClass(Object.class)));\r\n+\r\n+        // sort methods\r\n+        sort(declaredServiceMethods, MethodComparator.INSTANCE);\r\n+        sort(serviceMethods, MethodComparator.INSTANCE);\r\n+\r\n+        for (Method declaredServiceMethod : declaredServiceMethods) {\r\n+            for (Method serviceMethod : serviceMethods) {\r\n+                if (overrides(serviceMethod, declaredServiceMethod)) {\r\n+                    serviceMethodsMap.put(serviceMethod, declaredServiceMethod);\r\n+                    continue;\r\n+                }\r\n+            }\r\n+        }\r\n+        // make them to be read-only\r\n+        return unmodifiableMap(serviceMethodsMap);\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve the class of Dubbo Service interface\r\n+     *\r\n+     * @param serviceRestMetadata {@link ServiceRestMetadata}\r\n+     * @param serviceType         Dubbo Service interface or type\r\n+     * @return non-null\r\n+     * @throws RuntimeException If the class is not found, the {@link RuntimeException} wraps the cause will be thrown\r\n+     */\r\n+    protected Class<?> resolveServiceInterfaceClass(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\r\n+        return execute(serviceType.getClassLoader(), classLoader -> {\r\n+            String serviceInterface = serviceRestMetadata.getServiceInterface();\r\n+            return forName(serviceInterface, classLoader);\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * Process the single {@link RestMethodMetadata} by the specified {@link Consumer} if present\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @param metadataToProcess     {@link RestMethodMetadata} to process if present\r\n+     * @return if processed successfully, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    protected boolean processRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\r\n+                                                Class<?> serviceInterfaceClass,\r\n+                                                Consumer<RestMethodMetadata> metadataToProcess) {\r\n+\r\n+        if (!isRestCapableMethod(serviceMethod, serviceType, serviceInterfaceClass)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        String requestPath = resolveRequestPath(serviceMethod, serviceType, serviceInterfaceClass); // requestPath is required\r\n+\r\n+        if (requestPath == null) {\r\n+            return false;\r\n+        }\r\n+\r\n+        String requestMethod = resolveRequestMethod(serviceMethod, serviceType, serviceInterfaceClass); // requestMethod is required\r\n+\r\n+        if (requestMethod == null) {\r\n+            return false;\r\n+        }\r\n+\r\n+        RestMethodMetadata metadata = new RestMethodMetadata();\r\n+\r\n+        MethodDefinition methodDefinition = resolveMethodDefinition(serviceMethod, serviceType, serviceInterfaceClass);\r\n+        // Set MethodDefinition\r\n+        metadata.setMethod(methodDefinition);\r\n+\r\n+        // process the annotated method parameters\r\n+        processAnnotatedMethodParameters(serviceMethod, serviceType, serviceInterfaceClass, metadata);\r\n+\r\n+        // process produces\r\n+        Set<String> produces = new LinkedHashSet<>();\r\n+        processProduces(serviceMethod, serviceType, serviceInterfaceClass, produces);\r\n+\r\n+        // process consumes\r\n+        Set<String> consumes = new LinkedHashSet<>();\r\n+        processConsumes(serviceMethod, serviceType, serviceInterfaceClass, consumes);\r\n+\r\n+        // Initialize RequestMetadata\r\n+        RequestMetadata request = metadata.getRequest();\r\n+        request.setPath(requestPath);\r\n+        request.setMethod(requestMethod);\r\n+        request.setProduces(produces);\r\n+        request.setConsumes(consumes);\r\n+\r\n+        // Post-Process\r\n+        postResolveRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, metadata);\r\n+\r\n+        // Accept RestMethodMetadata\r\n+        metadataToProcess.accept(metadata);\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Test the service method is capable of REST or not?\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return If capable, return <code>true</code>\r\n+     */\r\n+    protected abstract boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass);\r\n+\r\n+    /**\r\n+     * Resolve the request method\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return if can't be resolve, return <code>null</code>\r\n+     */\r\n+    protected abstract String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass);\r\n+\r\n+    /**\r\n+     * Resolve the request path\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return if can't be resolve, return <code>null</code>\r\n+     */\r\n+    protected abstract String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass);\r\n+\r\n+    /**\r\n+     * Resolve the {@link MethodDefinition}\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return if can't be resolve, return <code>null</code>\r\n+     * @see MethodDefinitionBuilder\r\n+     */\r\n+    protected MethodDefinition resolveMethodDefinition(Method serviceMethod, Class<?> serviceType,\r\n+                                                       Class<?> serviceInterfaceClass) {\r\n+        MethodDefinitionBuilder builder = new MethodDefinitionBuilder();\r\n+        return builder.build(serviceMethod);\r\n+    }\r\n+\r\n+    private void processAnnotatedMethodParameters(Method serviceMethod, Class<?> serviceType,\r\n+                                                  Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\r\n+        int paramCount = serviceMethod.getParameterCount();\r\n+        Parameter[] parameters = serviceMethod.getParameters();\r\n+        for (int i = 0; i < paramCount; i++) {\r\n+            Parameter parameter = parameters[i];\r\n+            // Add indexed parameter name\r\n+            metadata.addIndexToName(i, parameter.getName());\r\n+            processAnnotatedMethodParameter(parameter, i, serviceMethod, serviceType, serviceInterfaceClass, metadata);\r\n+        }\r\n+    }\r\n+\r\n+    private void processAnnotatedMethodParameter(Parameter parameter, int parameterIndex, Method serviceMethod,\r\n+                                                 Class<?> serviceType, Class<?> serviceInterfaceClass,\r\n+                                                 RestMethodMetadata metadata) {\r\n+        Annotation[] annotations = parameter.getAnnotations();\r\n+        for (Annotation annotation : annotations) {\r\n+            String annotationType = annotation.annotationType().getName();\r\n+            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\r\n+                    .forEach(processor -> {\r\n+                        processor.process(annotation, parameter, parameterIndex, serviceMethod, serviceType,\r\n+                                serviceInterfaceClass, metadata);\r\n+                    });\r\n+        }\r\n+    }\r\n+\r\n+    protected abstract void processProduces(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass,\r\n+                                            Set<String> produces);\r\n+\r\n+    protected abstract void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass,\r\n+                                            Set<String> consumes);\r\n+\r\n+    protected void postResolveRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\r\n+                                                 Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\r\n+    }\r\n+\r\n+    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\r\n+        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\r\n+        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .forEach(processor -> {\r\n+                    List<AnnotatedMethodParameterProcessor> processors =\r\n+                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\r\n+                    processors.add(processor);\r\n+                });\r\n+        return parameterProcessorsMap;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,66 +1,66 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-import javax.lang.model.element.VariableElement;\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Parameter;\n-\n-/**\n- * The interface to process the annotated method parameter\n- *\n- * @since 2.7.6\n- */\n-@SPI\n-public interface AnnotatedMethodParameterProcessor extends Prioritized {\n-\n-    /**\n-     * The string presenting the annotation type\n-     *\n-     * @return non-null\n-     */\n-    String getAnnotationType();\n-\n-    /**\n-     * Process the specified method {@link VariableElement parameter}\n-     *\n-     * @param annotation            {@link Annotation the target annotation} whose type is {@link #getAnnotationType()}\n-     * @param parameter             the method parameter\n-     * @param parameterIndex        the index of method parameter\n-     * @param method                {@link Method method that parameter belongs to}\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @param restMethodMetadata    {@link RestMethodMetadata the metadata is used to update}\n-     */\n-    void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\n-                 Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata);\n-\n-    /**\n-     * Build the default value\n-     *\n-     * @param parameterIndex the index of parameter\n-     * @return the placeholder\n-     */\n-    static String buildDefaultValue(int parameterIndex) {\n-        return \"{\" + parameterIndex + \"}\";\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+\r\n+import javax.lang.model.element.VariableElement;\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Parameter;\r\n+\r\n+/**\r\n+ * The interface to process the annotated method parameter\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface AnnotatedMethodParameterProcessor extends Prioritized {\r\n+\r\n+    /**\r\n+     * The string presenting the annotation type\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    String getAnnotationType();\r\n+\r\n+    /**\r\n+     * Process the specified method {@link VariableElement parameter}\r\n+     *\r\n+     * @param annotation            {@link Annotation the target annotation} whose type is {@link #getAnnotationType()}\r\n+     * @param parameter             the method parameter\r\n+     * @param parameterIndex        the index of method parameter\r\n+     * @param method                {@link Method method that parameter belongs to}\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @param restMethodMetadata    {@link RestMethodMetadata the metadata is used to update}\r\n+     */\r\n+    void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\r\n+                 Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata);\r\n+\r\n+    /**\r\n+     * Build the default value\r\n+     *\r\n+     * @param parameterIndex the index of parameter\r\n+     * @return the placeholder\r\n+     */\r\n+    static String buildDefaultValue(int parameterIndex) {\r\n+        return \"{\" + parameterIndex + \"}\";\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java", "source2": "org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,82 +1,82 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import com.google.gson.Gson;\n-import com.google.gson.JsonArray;\n-import com.google.gson.JsonElement;\n-import com.google.gson.JsonParser;\n-\n-import java.io.InputStream;\n-import java.io.InputStreamReader;\n-import java.net.URL;\n-import java.util.Enumeration;\n-import java.util.LinkedList;\n-import java.util.List;\n-\n-import static java.util.Collections.unmodifiableList;\n-import static org.apache.dubbo.common.function.ThrowableAction.execute;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.METADATA_ENCODING;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\n-\n-/**\n- * Class-Path based {@link ServiceRestMetadataReader} implementation\n- *\n- * @see ServiceRestMetadataReader\n- * @since 2.7.6\n- */\n-public class ClassPathServiceRestMetadataReader implements ServiceRestMetadataReader {\n-\n-    private final String serviceRestMetadataJsonResourcePath;\n-\n-    public ClassPathServiceRestMetadataReader() {\n-        this(SERVICE_REST_METADATA_RESOURCE_PATH);\n-    }\n-\n-    public ClassPathServiceRestMetadataReader(String serviceRestMetadataJsonResourcePath) {\n-        this.serviceRestMetadataJsonResourcePath = serviceRestMetadataJsonResourcePath;\n-    }\n-\n-    @Override\n-    public List<ServiceRestMetadata> read() {\n-\n-        List<ServiceRestMetadata> serviceRestMetadataList = new LinkedList<>();\n-\n-        ClassLoader classLoader = getClass().getClassLoader();\n-\n-        execute(() -> {\n-            Enumeration<URL> resources = classLoader.getResources(serviceRestMetadataJsonResourcePath);\n-            Gson gson = new Gson();\n-            while (resources.hasMoreElements()) {\n-                URL resource = resources.nextElement();\n-                InputStream inputStream = resource.openStream();\n-                JsonParser parser = new JsonParser();\n-                JsonElement jsonElement = parser.parse(new InputStreamReader(inputStream, METADATA_ENCODING));\n-                if (jsonElement.isJsonArray()) {\n-                    JsonArray jsonArray = jsonElement.getAsJsonArray();\n-                    for (int i = 0; i < jsonArray.size(); i++) {\n-                        JsonElement childJsonElement = jsonArray.get(i);\n-                        ServiceRestMetadata serviceRestMetadata = gson.fromJson(childJsonElement, ServiceRestMetadata.class);\n-                        serviceRestMetadataList.add(serviceRestMetadata);\n-                    }\n-                }\n-            }\n-        });\n-\n-        return unmodifiableList(serviceRestMetadataList);\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import com.google.gson.Gson;\r\n+import com.google.gson.JsonArray;\r\n+import com.google.gson.JsonElement;\r\n+import com.google.gson.JsonParser;\r\n+\r\n+import java.io.InputStream;\r\n+import java.io.InputStreamReader;\r\n+import java.net.URL;\r\n+import java.util.Enumeration;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+\r\n+import static java.util.Collections.unmodifiableList;\r\n+import static org.apache.dubbo.common.function.ThrowableAction.execute;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.METADATA_ENCODING;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\r\n+\r\n+/**\r\n+ * Class-Path based {@link ServiceRestMetadataReader} implementation\r\n+ *\r\n+ * @see ServiceRestMetadataReader\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ClassPathServiceRestMetadataReader implements ServiceRestMetadataReader {\r\n+\r\n+    private final String serviceRestMetadataJsonResourcePath;\r\n+\r\n+    public ClassPathServiceRestMetadataReader() {\r\n+        this(SERVICE_REST_METADATA_RESOURCE_PATH);\r\n+    }\r\n+\r\n+    public ClassPathServiceRestMetadataReader(String serviceRestMetadataJsonResourcePath) {\r\n+        this.serviceRestMetadataJsonResourcePath = serviceRestMetadataJsonResourcePath;\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<ServiceRestMetadata> read() {\r\n+\r\n+        List<ServiceRestMetadata> serviceRestMetadataList = new LinkedList<>();\r\n+\r\n+        ClassLoader classLoader = getClass().getClassLoader();\r\n+\r\n+        execute(() -> {\r\n+            Enumeration<URL> resources = classLoader.getResources(serviceRestMetadataJsonResourcePath);\r\n+            Gson gson = new Gson();\r\n+            while (resources.hasMoreElements()) {\r\n+                URL resource = resources.nextElement();\r\n+                InputStream inputStream = resource.openStream();\r\n+                JsonParser parser = new JsonParser();\r\n+                JsonElement jsonElement = parser.parse(new InputStreamReader(inputStream, METADATA_ENCODING));\r\n+                if (jsonElement.isJsonArray()) {\r\n+                    JsonArray jsonArray = jsonElement.getAsJsonArray();\r\n+                    for (int i = 0; i < jsonArray.size(); i++) {\r\n+                        JsonElement childJsonElement = jsonArray.get(i);\r\n+                        ServiceRestMetadata serviceRestMetadata = gson.fromJson(childJsonElement, ServiceRestMetadata.class);\r\n+                        serviceRestMetadataList.add(serviceRestMetadata);\r\n+                    }\r\n+                }\r\n+            }\r\n+        });\r\n+\r\n+        return unmodifiableList(serviceRestMetadataList);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,59 +1,59 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import java.lang.reflect.Method;\n-import java.util.Set;\n-\n-\n-/**\n- * The default implementation {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    @Override\n-    protected boolean supports0(Class<?> serviceType) {\n-        return false;\n-    }\n-\n-    @Override\n-    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return false;\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return null;\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return null;\n-    }\n-\n-    @Override\n-    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\n-\n-    }\n-\n-    @Override\n-    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\n-\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.Set;\r\n+\r\n+\r\n+/**\r\n+ * The default implementation {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    @Override\r\n+    protected boolean supports0(Class<?> serviceType) {\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/RequestMetadata.java", "source2": "org/apache/dubbo/metadata/rest/RequestMetadata.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,226 +1,226 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-\n-import java.io.Serializable;\n-import java.util.Collection;\n-import java.util.LinkedHashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.Set;\n-\n-import static java.util.Collections.unmodifiableMap;\n-import static org.apache.dubbo.common.utils.PathUtils.normalize;\n-import static org.apache.dubbo.common.utils.StringUtils.isBlank;\n-\n-/**\n- * The metadata class for REST request\n- *\n- * @since 2.7.6\n- */\n-public class RequestMetadata implements Serializable {\n-\n-    private static final long serialVersionUID = -240099840085329958L;\n-\n-    private String method;\n-\n-    private String path;\n-\n-    private Map<String, List<String>> params = new LinkedHashMap<>();\n-\n-    private Map<String, List<String>> headers = new LinkedHashMap<>();\n-\n-    private Set<String> consumes = new LinkedHashSet<>();\n-\n-    private Set<String> produces = new LinkedHashSet<>();\n-\n-    /**\n-     * Default Constructor\n-     */\n-    public RequestMetadata() {\n-    }\n-\n-    public String getMethod() {\n-        return method;\n-    }\n-\n-    public void setMethod(String method) {\n-        this.method = method == null ? null : method.toUpperCase();\n-    }\n-\n-    public String getPath() {\n-        return path;\n-    }\n-\n-    public void setPath(String path) {\n-        this.path = normalize(path);\n-    }\n-\n-    public Map<String, List<String>> getParams() {\n-        return unmodifiableMap(params);\n-    }\n-\n-    public void setParams(Map<String, List<String>> params) {\n-        params(params);\n-    }\n-\n-    private static void add(Map<String, List<String>> multiValueMap, String key, String value) {\n-        if (isBlank(key)) {\n-            return;\n-        }\n-        List<String> values = get(multiValueMap, key, true);\n-        values.add(value);\n-    }\n-\n-    private static <T extends Collection<String>> void addAll(Map<String, List<String>> multiValueMap,\n-                                                              Map<String, T> source) {\n-        for (Map.Entry<String, T> entry : source.entrySet()) {\n-            String key = entry.getKey();\n-            for (String value : entry.getValue()) {\n-                add(multiValueMap, key, value);\n-            }\n-        }\n-    }\n-\n-    private static String getFirst(Map<String, List<String>> multiValueMap, String key) {\n-        List<String> values = get(multiValueMap, key);\n-        return CollectionUtils.isNotEmpty(values) ? values.get(0) : null;\n-    }\n-\n-    private static List<String> get(Map<String, List<String>> multiValueMap, String key) {\n-        return get(multiValueMap, key, false);\n-    }\n-\n-    private static List<String> get(Map<String, List<String>> multiValueMap, String key, boolean createIfAbsent) {\n-        return createIfAbsent ? multiValueMap.computeIfAbsent(key, k -> new LinkedList<>()) : multiValueMap.get(key);\n-    }\n-\n-    public Map<String, List<String>> getHeaders() {\n-        return unmodifiableMap(headers);\n-    }\n-\n-    public void setHeaders(Map<String, List<String>> headers) {\n-        headers(headers);\n-    }\n-\n-    public Set<String> getConsumes() {\n-        return consumes;\n-    }\n-\n-    public void setConsumes(Set<String> consumes) {\n-        this.consumes = consumes;\n-    }\n-\n-    public Set<String> getProduces() {\n-        return produces;\n-    }\n-\n-    public void setProduces(Set<String> produces) {\n-        this.produces = produces;\n-    }\n-\n-    public Set<String> getParamNames() {\n-        return params.keySet();\n-    }\n-\n-    public Set<String> getHeaderNames() {\n-        return headers.keySet();\n-    }\n-\n-//    public List<MediaType> getConsumeMediaTypes() {\n-//        return toMediaTypes(consumes);\n-//    }\n-//\n-//    public List<MediaType> getProduceMediaTypes() {\n-//        return toMediaTypes(produces);\n-//    }\n-\n-    public String getParameter(String name) {\n-        return getFirst(params, name);\n-    }\n-\n-    public String getHeader(String name) {\n-        return getFirst(headers, name);\n-    }\n-\n-    public RequestMetadata addParam(String name, String value) {\n-        add(params, name, value);\n-        return this;\n-    }\n-\n-    public RequestMetadata addHeader(String name, String value) {\n-        add(headers, name, value);\n-        return this;\n-    }\n-\n-    private <T extends Collection<String>> RequestMetadata params(Map<String, T> params) {\n-        addAll(this.params, params);\n-        return this;\n-    }\n-\n-    private <T extends Collection<String>> RequestMetadata headers(Map<String, List<String>> headers) {\n-        if (headers != null && !headers.isEmpty()) {\n-            Map<String, List<String>> httpHeaders = new LinkedHashMap<>();\n-            // Add all headers\n-            addAll(headers, httpHeaders);\n-            // Handles \"Content-Type\" and \"Accept\" headers if present\n-//            mediaTypes(httpHeaders, HttpHeaders.CONTENT_TYPE, this.consumes);\n-//            mediaTypes(httpHeaders, HttpHeaders.ACCEPT, this.produces);\n-            this.headers.putAll(httpHeaders);\n-        }\n-        return this;\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof RequestMetadata)) {\n-            return false;\n-        }\n-        RequestMetadata that = (RequestMetadata) o;\n-        return Objects.equals(method, that.method)\n-                && Objects.equals(path, that.path)\n-                && Objects.equals(consumes, that.consumes)\n-                && Objects.equals(produces, that.produces) &&\n-                // Metadata should not compare the values\n-                Objects.equals(getParamNames(), that.getParamNames())\n-                && Objects.equals(getHeaderNames(), that.getHeaderNames());\n-\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        // The values of metadata should not use for the hashCode() method\n-        return Objects.hash(method, path, consumes, produces, getParamNames(),\n-                getHeaderNames());\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"RequestMetadata{\" + \"method='\" + method + '\\'' + \", path='\" + path + '\\''\n-                + \", params=\" + params + \", headers=\" + headers + \", consumes=\" + consumes\n-                + \", produces=\" + produces + '}';\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.Collection;\r\n+import java.util.LinkedHashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+\r\n+import static java.util.Collections.unmodifiableMap;\r\n+import static org.apache.dubbo.common.utils.PathUtils.normalize;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isBlank;\r\n+\r\n+/**\r\n+ * The metadata class for REST request\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class RequestMetadata implements Serializable {\r\n+\r\n+    private static final long serialVersionUID = -240099840085329958L;\r\n+\r\n+    private String method;\r\n+\r\n+    private String path;\r\n+\r\n+    private Map<String, List<String>> params = new LinkedHashMap<>();\r\n+\r\n+    private Map<String, List<String>> headers = new LinkedHashMap<>();\r\n+\r\n+    private Set<String> consumes = new LinkedHashSet<>();\r\n+\r\n+    private Set<String> produces = new LinkedHashSet<>();\r\n+\r\n+    /**\r\n+     * Default Constructor\r\n+     */\r\n+    public RequestMetadata() {\r\n+    }\r\n+\r\n+    public String getMethod() {\r\n+        return method;\r\n+    }\r\n+\r\n+    public void setMethod(String method) {\r\n+        this.method = method == null ? null : method.toUpperCase();\r\n+    }\r\n+\r\n+    public String getPath() {\r\n+        return path;\r\n+    }\r\n+\r\n+    public void setPath(String path) {\r\n+        this.path = normalize(path);\r\n+    }\r\n+\r\n+    public Map<String, List<String>> getParams() {\r\n+        return unmodifiableMap(params);\r\n+    }\r\n+\r\n+    public void setParams(Map<String, List<String>> params) {\r\n+        params(params);\r\n+    }\r\n+\r\n+    private static void add(Map<String, List<String>> multiValueMap, String key, String value) {\r\n+        if (isBlank(key)) {\r\n+            return;\r\n+        }\r\n+        List<String> values = get(multiValueMap, key, true);\r\n+        values.add(value);\r\n+    }\r\n+\r\n+    private static <T extends Collection<String>> void addAll(Map<String, List<String>> multiValueMap,\r\n+                                                              Map<String, T> source) {\r\n+        for (Map.Entry<String, T> entry : source.entrySet()) {\r\n+            String key = entry.getKey();\r\n+            for (String value : entry.getValue()) {\r\n+                add(multiValueMap, key, value);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private static String getFirst(Map<String, List<String>> multiValueMap, String key) {\r\n+        List<String> values = get(multiValueMap, key);\r\n+        return CollectionUtils.isNotEmpty(values) ? values.get(0) : null;\r\n+    }\r\n+\r\n+    private static List<String> get(Map<String, List<String>> multiValueMap, String key) {\r\n+        return get(multiValueMap, key, false);\r\n+    }\r\n+\r\n+    private static List<String> get(Map<String, List<String>> multiValueMap, String key, boolean createIfAbsent) {\r\n+        return createIfAbsent ? multiValueMap.computeIfAbsent(key, k -> new LinkedList<>()) : multiValueMap.get(key);\r\n+    }\r\n+\r\n+    public Map<String, List<String>> getHeaders() {\r\n+        return unmodifiableMap(headers);\r\n+    }\r\n+\r\n+    public void setHeaders(Map<String, List<String>> headers) {\r\n+        headers(headers);\r\n+    }\r\n+\r\n+    public Set<String> getConsumes() {\r\n+        return consumes;\r\n+    }\r\n+\r\n+    public void setConsumes(Set<String> consumes) {\r\n+        this.consumes = consumes;\r\n+    }\r\n+\r\n+    public Set<String> getProduces() {\r\n+        return produces;\r\n+    }\r\n+\r\n+    public void setProduces(Set<String> produces) {\r\n+        this.produces = produces;\r\n+    }\r\n+\r\n+    public Set<String> getParamNames() {\r\n+        return params.keySet();\r\n+    }\r\n+\r\n+    public Set<String> getHeaderNames() {\r\n+        return headers.keySet();\r\n+    }\r\n+\r\n+//    public List<MediaType> getConsumeMediaTypes() {\r\n+//        return toMediaTypes(consumes);\r\n+//    }\r\n+//\r\n+//    public List<MediaType> getProduceMediaTypes() {\r\n+//        return toMediaTypes(produces);\r\n+//    }\r\n+\r\n+    public String getParameter(String name) {\r\n+        return getFirst(params, name);\r\n+    }\r\n+\r\n+    public String getHeader(String name) {\r\n+        return getFirst(headers, name);\r\n+    }\r\n+\r\n+    public RequestMetadata addParam(String name, String value) {\r\n+        add(params, name, value);\r\n+        return this;\r\n+    }\r\n+\r\n+    public RequestMetadata addHeader(String name, String value) {\r\n+        add(headers, name, value);\r\n+        return this;\r\n+    }\r\n+\r\n+    private <T extends Collection<String>> RequestMetadata params(Map<String, T> params) {\r\n+        addAll(this.params, params);\r\n+        return this;\r\n+    }\r\n+\r\n+    private <T extends Collection<String>> RequestMetadata headers(Map<String, List<String>> headers) {\r\n+        if (headers != null && !headers.isEmpty()) {\r\n+            Map<String, List<String>> httpHeaders = new LinkedHashMap<>();\r\n+            // Add all headers\r\n+            addAll(headers, httpHeaders);\r\n+            // Handles \"Content-Type\" and \"Accept\" headers if present\r\n+//            mediaTypes(httpHeaders, HttpHeaders.CONTENT_TYPE, this.consumes);\r\n+//            mediaTypes(httpHeaders, HttpHeaders.ACCEPT, this.produces);\r\n+            this.headers.putAll(httpHeaders);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof RequestMetadata)) {\r\n+            return false;\r\n+        }\r\n+        RequestMetadata that = (RequestMetadata) o;\r\n+        return Objects.equals(method, that.method)\r\n+                && Objects.equals(path, that.path)\r\n+                && Objects.equals(consumes, that.consumes)\r\n+                && Objects.equals(produces, that.produces) &&\r\n+                // Metadata should not compare the values\r\n+                Objects.equals(getParamNames(), that.getParamNames())\r\n+                && Objects.equals(getHeaderNames(), that.getHeaderNames());\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        // The values of metadata should not use for the hashCode() method\r\n+        return Objects.hash(method, path, consumes, produces, getParamNames(),\r\n+                getHeaderNames());\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"RequestMetadata{\" + \"method='\" + method + '\\'' + \", path='\" + path + '\\''\r\n+                + \", params=\" + params + \", headers=\" + headers + \", consumes=\" + consumes\r\n+                + \", produces=\" + produces + '}';\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/RestMetadataConstants.java", "source2": "org/apache/dubbo/metadata/rest/RestMetadataConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,145 +1,145 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import java.lang.annotation.Annotation;\n-\n-import static org.apache.dubbo.common.utils.ClassUtils.getClassLoader;\n-import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\n-\n-/**\n- * The REST Metadata Constants definition interface\n- *\n- * @since 2.7.6\n- */\n-public interface RestMetadataConstants {\n-\n-    /**\n-     * The encoding of metadata\n-     */\n-    String METADATA_ENCODING = \"UTF-8\";\n-\n-    /**\n-     * {@link ServiceRestMetadata} Resource PATH\n-     */\n-    String SERVICE_REST_METADATA_RESOURCE_PATH = \"META-INF/dubbo/service-rest-metadata.json\";\n-\n-    /**\n-     * JAX-RS\n-     */\n-    interface JAX_RS {\n-\n-        /**\n-         * The annotation class name of @Path\n-         */\n-        String PATH_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Path\";\n-\n-        /**\n-         * The annotation class name of @HttpMethod\n-         */\n-        String HTTP_METHOD_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HttpMethod\";\n-\n-        /**\n-         * The annotation class name of @Produces\n-         */\n-        String PRODUCES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Produces\";\n-\n-        /**\n-         * The annotation class name of @Consumes\n-         */\n-        String CONSUMES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Consumes\";\n-\n-        /**\n-         * The annotation class name of @DefaultValue\n-         */\n-        String DEFAULT_VALUE_ANNOTATION_CLASS_NAME = \"javax.ws.rs.DefaultValue\";\n-\n-        /**\n-         * The annotation class name of @FormParam\n-         */\n-        String FORM_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.FormParam\";\n-\n-        /**\n-         * The annotation class name of @HeaderParam\n-         */\n-        String HEADER_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HeaderParam\";\n-\n-        /**\n-         * The annotation class name of @MatrixParam\n-         */\n-        String MATRIX_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.MatrixParam\";\n-\n-        /**\n-         * The annotation class name of @QueryParam\n-         */\n-        String QUERY_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.QueryParam\";\n-    }\n-\n-    /**\n-     * Spring MVC\n-     */\n-    interface SPRING_MVC {\n-\n-        /**\n-         * The annotation class name of @Controller\n-         */\n-        String CONTROLLER_ANNOTATION_CLASS_NAME = \"org.springframework.stereotype.Controller\";\n-\n-        /**\n-         * The annotation class name of @RequestMapping\n-         */\n-        String REQUEST_MAPPING_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestMapping\";\n-\n-        /**\n-         * The annotation class name of @RequestHeader\n-         */\n-        String REQUEST_HEADER_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestHeader\";\n-\n-        /**\n-         * The annotation class name of @RequestParam\n-         */\n-        String REQUEST_PARAM_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestParam\";\n-\n-        /**\n-         * The class of @Controller\n-         *\n-         * @since 2.7.9\n-         */\n-        Class<? extends Annotation> CONTROLLER_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(CONTROLLER_ANNOTATION_CLASS_NAME, getClassLoader());\n-\n-        /**\n-         * The class of @RequestMapping\n-         *\n-         * @since 2.7.9\n-         */\n-        Class<? extends Annotation> REQUEST_MAPPING_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(REQUEST_MAPPING_ANNOTATION_CLASS_NAME, getClassLoader());\n-\n-        /**\n-         * The annotation class name of AnnotatedElementUtils\n-         *\n-         * @since 2.7.9\n-         */\n-        String ANNOTATED_ELEMENT_UTILS_CLASS_NAME = \"org.springframework.core.annotation.AnnotatedElementUtils\";\n-\n-        /**\n-         * The class of AnnotatedElementUtils\n-         *\n-         * @since 2.7.9\n-         */\n-        Class<?> ANNOTATED_ELEMENT_UTILS_CLASS = resolveClass(ANNOTATED_ELEMENT_UTILS_CLASS_NAME, getClassLoader());\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getClassLoader;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\r\n+\r\n+/**\r\n+ * The REST Metadata Constants definition interface\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface RestMetadataConstants {\r\n+\r\n+    /**\r\n+     * The encoding of metadata\r\n+     */\r\n+    String METADATA_ENCODING = \"UTF-8\";\r\n+\r\n+    /**\r\n+     * {@link ServiceRestMetadata} Resource PATH\r\n+     */\r\n+    String SERVICE_REST_METADATA_RESOURCE_PATH = \"META-INF/dubbo/service-rest-metadata.json\";\r\n+\r\n+    /**\r\n+     * JAX-RS\r\n+     */\r\n+    interface JAX_RS {\r\n+\r\n+        /**\r\n+         * The annotation class name of @Path\r\n+         */\r\n+        String PATH_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Path\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @HttpMethod\r\n+         */\r\n+        String HTTP_METHOD_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HttpMethod\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @Produces\r\n+         */\r\n+        String PRODUCES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Produces\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @Consumes\r\n+         */\r\n+        String CONSUMES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Consumes\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @DefaultValue\r\n+         */\r\n+        String DEFAULT_VALUE_ANNOTATION_CLASS_NAME = \"javax.ws.rs.DefaultValue\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @FormParam\r\n+         */\r\n+        String FORM_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.FormParam\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @HeaderParam\r\n+         */\r\n+        String HEADER_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HeaderParam\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @MatrixParam\r\n+         */\r\n+        String MATRIX_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.MatrixParam\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @QueryParam\r\n+         */\r\n+        String QUERY_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.QueryParam\";\r\n+    }\r\n+\r\n+    /**\r\n+     * Spring MVC\r\n+     */\r\n+    interface SPRING_MVC {\r\n+\r\n+        /**\r\n+         * The annotation class name of @Controller\r\n+         */\r\n+        String CONTROLLER_ANNOTATION_CLASS_NAME = \"org.springframework.stereotype.Controller\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @RequestMapping\r\n+         */\r\n+        String REQUEST_MAPPING_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestMapping\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @RequestHeader\r\n+         */\r\n+        String REQUEST_HEADER_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestHeader\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @RequestParam\r\n+         */\r\n+        String REQUEST_PARAM_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestParam\";\r\n+\r\n+        /**\r\n+         * The class of @Controller\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        Class<? extends Annotation> CONTROLLER_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(CONTROLLER_ANNOTATION_CLASS_NAME, getClassLoader());\r\n+\r\n+        /**\r\n+         * The class of @RequestMapping\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        Class<? extends Annotation> REQUEST_MAPPING_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(REQUEST_MAPPING_ANNOTATION_CLASS_NAME, getClassLoader());\r\n+\r\n+        /**\r\n+         * The annotation class name of AnnotatedElementUtils\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        String ANNOTATED_ELEMENT_UTILS_CLASS_NAME = \"org.springframework.core.annotation.AnnotatedElementUtils\";\r\n+\r\n+        /**\r\n+         * The class of AnnotatedElementUtils\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        Class<?> ANNOTATED_ELEMENT_UTILS_CLASS = resolveClass(ANNOTATED_ELEMENT_UTILS_CLASS_NAME, getClassLoader());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/RestMethodMetadata.java", "source2": "org/apache/dubbo/metadata/rest/RestMethodMetadata.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,199 +1,199 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-\n-import java.io.Serializable;\n-import java.util.ArrayList;\n-import java.util.Collection;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-\n-import static java.util.Collections.emptyList;\n-\n-/**\n- * The metadata class for {@link RequestMetadata HTTP(REST) request} and\n- * its binding {@link MethodDefinition method definition}\n- *\n- * @since 2.7.6\n- */\n-public class RestMethodMetadata implements Serializable {\n-\n-    private static final long serialVersionUID = 2935252016200830694L;\n-\n-    private MethodDefinition method;\n-\n-    private RequestMetadata request;\n-\n-    private Integer urlIndex;\n-\n-    private Integer bodyIndex;\n-\n-    private Integer headerMapIndex;\n-\n-    private String bodyType;\n-\n-    private Map<Integer, Collection<String>> indexToName;\n-\n-    private List<String> formParams;\n-\n-    private Map<Integer, Boolean> indexToEncoded;\n-\n-    public MethodDefinition getMethod() {\n-        if (method == null) {\n-            method = new MethodDefinition();\n-        }\n-        return method;\n-    }\n-\n-    public void setMethod(MethodDefinition method) {\n-        this.method = method;\n-    }\n-\n-    public RequestMetadata getRequest() {\n-        if (request == null) {\n-            request = new RequestMetadata();\n-        }\n-        return request;\n-    }\n-\n-    public void setRequest(RequestMetadata request) {\n-        this.request = request;\n-    }\n-\n-    public Integer getUrlIndex() {\n-        return urlIndex;\n-    }\n-\n-    public void setUrlIndex(Integer urlIndex) {\n-        this.urlIndex = urlIndex;\n-    }\n-\n-    public Integer getBodyIndex() {\n-        return bodyIndex;\n-    }\n-\n-    public void setBodyIndex(Integer bodyIndex) {\n-        this.bodyIndex = bodyIndex;\n-    }\n-\n-    public Integer getHeaderMapIndex() {\n-        return headerMapIndex;\n-    }\n-\n-    public void setHeaderMapIndex(Integer headerMapIndex) {\n-        this.headerMapIndex = headerMapIndex;\n-    }\n-\n-    public String getBodyType() {\n-        return bodyType;\n-    }\n-\n-    public void setBodyType(String bodyType) {\n-        this.bodyType = bodyType;\n-    }\n-\n-    public Map<Integer, Collection<String>> getIndexToName() {\n-        if (indexToName == null) {\n-            indexToName = new HashMap<>();\n-        }\n-        return indexToName;\n-    }\n-\n-    public void setIndexToName(Map<Integer, Collection<String>> indexToName) {\n-        this.indexToName = indexToName;\n-    }\n-\n-    public void addIndexToName(Integer index, String name) {\n-        if (index == null) {\n-            return;\n-        }\n-\n-        if (name.startsWith(\"arg\") && name.endsWith(index.toString())) {\n-            // Ignore this value because of the Java byte-code without the metadata of method parameters\n-            return;\n-        }\n-\n-        Map<Integer, Collection<String>> indexToName = getIndexToName();\n-        Collection<String> parameterNames = indexToName.computeIfAbsent(index, i -> new ArrayList<>(1));\n-        parameterNames.add(name);\n-    }\n-\n-    public boolean hasIndexedName(Integer index, String name) {\n-        Map<Integer, Collection<String>> indexToName = getIndexToName();\n-        return indexToName.getOrDefault(index, emptyList()).contains(name);\n-    }\n-\n-    public List<String> getFormParams() {\n-        return formParams;\n-    }\n-\n-    public void setFormParams(List<String> formParams) {\n-        this.formParams = formParams;\n-    }\n-\n-    public Map<Integer, Boolean> getIndexToEncoded() {\n-        return indexToEncoded;\n-    }\n-\n-    public void setIndexToEncoded(Map<Integer, Boolean> indexToEncoded) {\n-        this.indexToEncoded = indexToEncoded;\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof RestMethodMetadata)) {\n-            return false;\n-        }\n-        RestMethodMetadata that = (RestMethodMetadata) o;\n-        return Objects.equals(getMethod(), that.getMethod()) &&\n-                Objects.equals(getRequest(), that.getRequest()) &&\n-                Objects.equals(getUrlIndex(), that.getUrlIndex()) &&\n-                Objects.equals(getBodyIndex(), that.getBodyIndex()) &&\n-                Objects.equals(getHeaderMapIndex(), that.getHeaderMapIndex()) &&\n-                Objects.equals(getBodyType(), that.getBodyType()) &&\n-                Objects.equals(getFormParams(), that.getFormParams()) &&\n-                Objects.equals(getIndexToEncoded(), that.getIndexToEncoded());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getMethod(), getRequest(), getUrlIndex(), getBodyIndex(), getHeaderMapIndex(), getBodyType(), getFormParams(), getIndexToEncoded());\n-    }\n-\n-    @Override\n-    public String toString() {\n-        final StringBuilder sb = new StringBuilder(\"RestMethodMetadata{\");\n-        sb.append(\"method=\").append(method);\n-        sb.append(\", request=\").append(request);\n-        sb.append(\", urlIndex=\").append(urlIndex);\n-        sb.append(\", bodyIndex=\").append(bodyIndex);\n-        sb.append(\", headerMapIndex=\").append(headerMapIndex);\n-        sb.append(\", bodyType='\").append(bodyType).append('\\'');\n-        sb.append(\", indexToName=\").append(indexToName);\n-        sb.append(\", formParams=\").append(formParams);\n-        sb.append(\", indexToEncoded=\").append(indexToEncoded);\n-        sb.append('}');\n-        return sb.toString();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+\r\n+/**\r\n+ * The metadata class for {@link RequestMetadata HTTP(REST) request} and\r\n+ * its binding {@link MethodDefinition method definition}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class RestMethodMetadata implements Serializable {\r\n+\r\n+    private static final long serialVersionUID = 2935252016200830694L;\r\n+\r\n+    private MethodDefinition method;\r\n+\r\n+    private RequestMetadata request;\r\n+\r\n+    private Integer urlIndex;\r\n+\r\n+    private Integer bodyIndex;\r\n+\r\n+    private Integer headerMapIndex;\r\n+\r\n+    private String bodyType;\r\n+\r\n+    private Map<Integer, Collection<String>> indexToName;\r\n+\r\n+    private List<String> formParams;\r\n+\r\n+    private Map<Integer, Boolean> indexToEncoded;\r\n+\r\n+    public MethodDefinition getMethod() {\r\n+        if (method == null) {\r\n+            method = new MethodDefinition();\r\n+        }\r\n+        return method;\r\n+    }\r\n+\r\n+    public void setMethod(MethodDefinition method) {\r\n+        this.method = method;\r\n+    }\r\n+\r\n+    public RequestMetadata getRequest() {\r\n+        if (request == null) {\r\n+            request = new RequestMetadata();\r\n+        }\r\n+        return request;\r\n+    }\r\n+\r\n+    public void setRequest(RequestMetadata request) {\r\n+        this.request = request;\r\n+    }\r\n+\r\n+    public Integer getUrlIndex() {\r\n+        return urlIndex;\r\n+    }\r\n+\r\n+    public void setUrlIndex(Integer urlIndex) {\r\n+        this.urlIndex = urlIndex;\r\n+    }\r\n+\r\n+    public Integer getBodyIndex() {\r\n+        return bodyIndex;\r\n+    }\r\n+\r\n+    public void setBodyIndex(Integer bodyIndex) {\r\n+        this.bodyIndex = bodyIndex;\r\n+    }\r\n+\r\n+    public Integer getHeaderMapIndex() {\r\n+        return headerMapIndex;\r\n+    }\r\n+\r\n+    public void setHeaderMapIndex(Integer headerMapIndex) {\r\n+        this.headerMapIndex = headerMapIndex;\r\n+    }\r\n+\r\n+    public String getBodyType() {\r\n+        return bodyType;\r\n+    }\r\n+\r\n+    public void setBodyType(String bodyType) {\r\n+        this.bodyType = bodyType;\r\n+    }\r\n+\r\n+    public Map<Integer, Collection<String>> getIndexToName() {\r\n+        if (indexToName == null) {\r\n+            indexToName = new HashMap<>();\r\n+        }\r\n+        return indexToName;\r\n+    }\r\n+\r\n+    public void setIndexToName(Map<Integer, Collection<String>> indexToName) {\r\n+        this.indexToName = indexToName;\r\n+    }\r\n+\r\n+    public void addIndexToName(Integer index, String name) {\r\n+        if (index == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        if (name.startsWith(\"arg\") && name.endsWith(index.toString())) {\r\n+            // Ignore this value because of the Java byte-code without the metadata of method parameters\r\n+            return;\r\n+        }\r\n+\r\n+        Map<Integer, Collection<String>> indexToName = getIndexToName();\r\n+        Collection<String> parameterNames = indexToName.computeIfAbsent(index, i -> new ArrayList<>(1));\r\n+        parameterNames.add(name);\r\n+    }\r\n+\r\n+    public boolean hasIndexedName(Integer index, String name) {\r\n+        Map<Integer, Collection<String>> indexToName = getIndexToName();\r\n+        return indexToName.getOrDefault(index, emptyList()).contains(name);\r\n+    }\r\n+\r\n+    public List<String> getFormParams() {\r\n+        return formParams;\r\n+    }\r\n+\r\n+    public void setFormParams(List<String> formParams) {\r\n+        this.formParams = formParams;\r\n+    }\r\n+\r\n+    public Map<Integer, Boolean> getIndexToEncoded() {\r\n+        return indexToEncoded;\r\n+    }\r\n+\r\n+    public void setIndexToEncoded(Map<Integer, Boolean> indexToEncoded) {\r\n+        this.indexToEncoded = indexToEncoded;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof RestMethodMetadata)) {\r\n+            return false;\r\n+        }\r\n+        RestMethodMetadata that = (RestMethodMetadata) o;\r\n+        return Objects.equals(getMethod(), that.getMethod()) &&\r\n+                Objects.equals(getRequest(), that.getRequest()) &&\r\n+                Objects.equals(getUrlIndex(), that.getUrlIndex()) &&\r\n+                Objects.equals(getBodyIndex(), that.getBodyIndex()) &&\r\n+                Objects.equals(getHeaderMapIndex(), that.getHeaderMapIndex()) &&\r\n+                Objects.equals(getBodyType(), that.getBodyType()) &&\r\n+                Objects.equals(getFormParams(), that.getFormParams()) &&\r\n+                Objects.equals(getIndexToEncoded(), that.getIndexToEncoded());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getMethod(), getRequest(), getUrlIndex(), getBodyIndex(), getHeaderMapIndex(), getBodyType(), getFormParams(), getIndexToEncoded());\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        final StringBuilder sb = new StringBuilder(\"RestMethodMetadata{\");\r\n+        sb.append(\"method=\").append(method);\r\n+        sb.append(\", request=\").append(request);\r\n+        sb.append(\", urlIndex=\").append(urlIndex);\r\n+        sb.append(\", bodyIndex=\").append(bodyIndex);\r\n+        sb.append(\", headerMapIndex=\").append(headerMapIndex);\r\n+        sb.append(\", bodyType='\").append(bodyType).append('\\'');\r\n+        sb.append(\", indexToName=\").append(indexToName);\r\n+        sb.append(\", formParams=\").append(formParams);\r\n+        sb.append(\", indexToEncoded=\").append(indexToEncoded);\r\n+        sb.append('}');\r\n+        return sb.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ServiceRestMetadata.java", "source2": "org/apache/dubbo/metadata/rest/ServiceRestMetadata.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,107 +1,107 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-import java.io.Serializable;\n-import java.util.LinkedHashSet;\n-import java.util.Objects;\n-import java.util.Set;\n-\n-/**\n- * The metadata class for {@link RequestMetadata HTTP(REST) request} and\n- * its binding Dubbo service metadata\n- *\n- * @since 2.7.6\n- */\n-public class ServiceRestMetadata implements Serializable {\n-\n-    private static final long serialVersionUID = -4549723140727443569L;\n-\n-    private String serviceInterface;\n-\n-    private String version;\n-\n-    private String group;\n-\n-    private Set<RestMethodMetadata> meta;\n-\n-    public String getServiceInterface() {\n-        return serviceInterface;\n-    }\n-\n-    public void setServiceInterface(String serviceInterface) {\n-        this.serviceInterface = serviceInterface;\n-    }\n-\n-    public String getVersion() {\n-        return version;\n-    }\n-\n-    public void setVersion(String version) {\n-        this.version = version;\n-    }\n-\n-    public String getGroup() {\n-        return group;\n-    }\n-\n-    public void setGroup(String group) {\n-        this.group = group;\n-    }\n-\n-    public Set<RestMethodMetadata> getMeta() {\n-        if (meta == null) {\n-            meta = new LinkedHashSet<>();\n-        }\n-        return meta;\n-    }\n-\n-    public void setMeta(Set<RestMethodMetadata> meta) {\n-        this.meta = meta;\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof ServiceRestMetadata)) {\n-            return false;\n-        }\n-        ServiceRestMetadata that = (ServiceRestMetadata) o;\n-        return Objects.equals(getServiceInterface(), that.getServiceInterface()) &&\n-                Objects.equals(getVersion(), that.getVersion()) &&\n-                Objects.equals(getGroup(), that.getGroup()) &&\n-                Objects.equals(getMeta(), that.getMeta());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getServiceInterface(), getVersion(), getGroup(), getMeta());\n-    }\n-\n-    @Override\n-    public String toString() {\n-        final StringBuilder sb = new StringBuilder(\"ServiceRestMetadata{\");\n-        sb.append(\"serviceInterface='\").append(serviceInterface).append('\\'');\n-        sb.append(\", version='\").append(version).append('\\'');\n-        sb.append(\", group='\").append(group).append('\\'');\n-        sb.append(\", meta=\").append(meta);\n-        sb.append('}');\n-        return sb.toString();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * The metadata class for {@link RequestMetadata HTTP(REST) request} and\r\n+ * its binding Dubbo service metadata\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ServiceRestMetadata implements Serializable {\r\n+\r\n+    private static final long serialVersionUID = -4549723140727443569L;\r\n+\r\n+    private String serviceInterface;\r\n+\r\n+    private String version;\r\n+\r\n+    private String group;\r\n+\r\n+    private Set<RestMethodMetadata> meta;\r\n+\r\n+    public String getServiceInterface() {\r\n+        return serviceInterface;\r\n+    }\r\n+\r\n+    public void setServiceInterface(String serviceInterface) {\r\n+        this.serviceInterface = serviceInterface;\r\n+    }\r\n+\r\n+    public String getVersion() {\r\n+        return version;\r\n+    }\r\n+\r\n+    public void setVersion(String version) {\r\n+        this.version = version;\r\n+    }\r\n+\r\n+    public String getGroup() {\r\n+        return group;\r\n+    }\r\n+\r\n+    public void setGroup(String group) {\r\n+        this.group = group;\r\n+    }\r\n+\r\n+    public Set<RestMethodMetadata> getMeta() {\r\n+        if (meta == null) {\r\n+            meta = new LinkedHashSet<>();\r\n+        }\r\n+        return meta;\r\n+    }\r\n+\r\n+    public void setMeta(Set<RestMethodMetadata> meta) {\r\n+        this.meta = meta;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof ServiceRestMetadata)) {\r\n+            return false;\r\n+        }\r\n+        ServiceRestMetadata that = (ServiceRestMetadata) o;\r\n+        return Objects.equals(getServiceInterface(), that.getServiceInterface()) &&\r\n+                Objects.equals(getVersion(), that.getVersion()) &&\r\n+                Objects.equals(getGroup(), that.getGroup()) &&\r\n+                Objects.equals(getMeta(), that.getMeta());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getServiceInterface(), getVersion(), getGroup(), getMeta());\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        final StringBuilder sb = new StringBuilder(\"ServiceRestMetadata{\");\r\n+        sb.append(\"serviceInterface='\").append(serviceInterface).append('\\'');\r\n+        sb.append(\", version='\").append(version).append('\\'');\r\n+        sb.append(\", group='\").append(group).append('\\'');\r\n+        sb.append(\", meta=\").append(meta);\r\n+        sb.append('}');\r\n+        return sb.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java", "source2": "org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,39 +1,39 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.List;\n-\n-/**\n- * An interface to read {@link ServiceRestMetadata}\n- *\n- * @see ServiceRestMetadata\n- * @since 2.7.6\n- */\n-@SPI\n-public interface ServiceRestMetadataReader {\n-\n-    /**\n-     * Read the instances of {@link ServiceRestMetadata}\n-     *\n-     * @return non-null\n-     */\n-    List<ServiceRestMetadata> read();\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * An interface to read {@link ServiceRestMetadata}\r\n+ *\r\n+ * @see ServiceRestMetadata\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface ServiceRestMetadataReader {\r\n+\r\n+    /**\r\n+     * Read the instances of {@link ServiceRestMetadata}\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    List<ServiceRestMetadata> read();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,43 +1,43 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest;\n-\n-/**\n- * The interface to resolve the {@link ServiceRestMetadata REST metadata} from the specified\n- * Dubbo Service interface or type.\n- *\n- * @since 2.7.6\n- */\n-public interface ServiceRestMetadataResolver {\n-\n-    /**\n-     * Support to resolve {@link ServiceRestMetadata REST metadata} or not\n-     *\n-     * @param serviceType Dubbo Service interface or type\n-     * @return If supports, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean supports(Class<?> serviceType);\n-\n-    /**\n-     * Resolve the {@link ServiceRestMetadata REST metadata} from the specified\n-     * Dubbo Service interface or type\n-     *\n-     * @param serviceType Dubbo Service interface or type\n-     * @return\n-     */\n-    ServiceRestMetadata resolve(Class<?> serviceType);\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest;\r\n+\r\n+/**\r\n+ * The interface to resolve the {@link ServiceRestMetadata REST metadata} from the specified\r\n+ * Dubbo Service interface or type.\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface ServiceRestMetadataResolver {\r\n+\r\n+    /**\r\n+     * Support to resolve {@link ServiceRestMetadata REST metadata} or not\r\n+     *\r\n+     * @param serviceType Dubbo Service interface or type\r\n+     * @return If supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean supports(Class<?> serviceType);\r\n+\r\n+    /**\r\n+     * Resolve the {@link ServiceRestMetadata REST metadata} from the specified\r\n+     * Dubbo Service interface or type\r\n+     *\r\n+     * @param serviceType Dubbo Service interface or type\r\n+     * @return\r\n+     */\r\n+    ServiceRestMetadata resolve(Class<?> serviceType);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,74 +1,74 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.util.List;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\n- * *\n- *\n- * @since 2.7.6\n- */\n-public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-\n-        // process the request parameters\n-        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\n-        // process the request headers\n-        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\n-    }\n-\n-    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\n-        OUTTER:\n-        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\n-            List<String> values = entry.getValue();\n-            int size = values.size();\n-            for (int i = 0; i < size; i++) {\n-                String value = values.get(i);\n-                if (placeholderValue.equals(value)) {\n-                    values.set(i, defaultValue);\n-                    break OUTTER;\n-                }\n-            }\n-        }\n-    }\n-\n-    public int getPriority() {\n-        return MIN_PRIORITY;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\r\n+ * *\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+\r\n+        // process the request parameters\r\n+        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\r\n+        // process the request headers\r\n+        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\r\n+    }\r\n+\r\n+    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\r\n+        OUTTER:\r\n+        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\r\n+            List<String> values = entry.getValue();\r\n+            int size = values.size();\r\n+            for (int i = 0; i < size; i++) {\r\n+                String value = values.get(i);\r\n+                if (placeholderValue.equals(value)) {\r\n+                    values.set(i, defaultValue);\r\n+                    break OUTTER;\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,34 +1,34 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\n- *\n- * @since 2.7.6\n- */\n-public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return FORM_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,49 +1,49 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\n- *\n- * @since 2.7.6\n- */\n-public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String headerName, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        // Add the placeholder as header value\n-        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String headerName, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        // Add the placeholder as header value\r\n+        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,99 +1,99 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.util.Set;\n-import java.util.stream.Stream;\n-\n-import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.findMetaAnnotation;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * JAX-RS {@link ServiceRestMetadataResolver} implementation\n- *\n- * @since 2.7.6\n- */\n-public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    @Override\n-    protected boolean supports0(Class<?> serviceType) {\n-        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return isAnnotationPresent(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Annotation httpMethod = findMetaAnnotation(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-        return getValue(httpMethod);\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        String requestBasePath = resolveRequestPathFromType(serviceType, serviceInterfaceClass);\n-        String requestRelativePath = resolveRequestPathFromMethod(serviceMethod);\n-        return buildPath(requestBasePath, requestRelativePath);\n-    }\n-\n-    private String resolveRequestPathFromType(Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Annotation path = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-        if (path == null) {\n-            path = findAnnotation(serviceInterfaceClass, PATH_ANNOTATION_CLASS_NAME);\n-        }\n-        return getValue(path);\n-    }\n-\n-    private String resolveRequestPathFromMethod(Method serviceMethod) {\n-        Annotation path = findAnnotation(serviceMethod, PATH_ANNOTATION_CLASS_NAME);\n-        return getValue(path);\n-    }\n-\n-    @Override\n-    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\n-                                   Set<String> produces) {\n-        addAnnotationValues(serviceMethod, PRODUCES_ANNOTATION_CLASS_NAME, produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\n-                                   Set<String> consumes) {\n-        addAnnotationValues(serviceMethod, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\n-    }\n-\n-    private void addAnnotationValues(Method serviceMethod, String annotationAttributeName, Set<String> result) {\n-        Annotation annotation = findAnnotation(serviceMethod, annotationAttributeName);\n-        String[] value = getValue(annotation);\n-        if (value != null) {\n-            Stream.of(value).forEach(result::add);\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Set;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.findMetaAnnotation;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * JAX-RS {@link ServiceRestMetadataResolver} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    @Override\r\n+    protected boolean supports0(Class<?> serviceType) {\r\n+        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return isAnnotationPresent(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Annotation httpMethod = findMetaAnnotation(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+        return getValue(httpMethod);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        String requestBasePath = resolveRequestPathFromType(serviceType, serviceInterfaceClass);\r\n+        String requestRelativePath = resolveRequestPathFromMethod(serviceMethod);\r\n+        return buildPath(requestBasePath, requestRelativePath);\r\n+    }\r\n+\r\n+    private String resolveRequestPathFromType(Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Annotation path = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+        if (path == null) {\r\n+            path = findAnnotation(serviceInterfaceClass, PATH_ANNOTATION_CLASS_NAME);\r\n+        }\r\n+        return getValue(path);\r\n+    }\r\n+\r\n+    private String resolveRequestPathFromMethod(Method serviceMethod) {\r\n+        Annotation path = findAnnotation(serviceMethod, PATH_ANNOTATION_CLASS_NAME);\r\n+        return getValue(path);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\r\n+                                   Set<String> produces) {\r\n+        addAnnotationValues(serviceMethod, PRODUCES_ANNOTATION_CLASS_NAME, produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\r\n+                                   Set<String> consumes) {\r\n+        addAnnotationValues(serviceMethod, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\r\n+    }\r\n+\r\n+    private void addAnnotationValues(Method serviceMethod, String annotationAttributeName, Set<String> result) {\r\n+        Annotation annotation = findAnnotation(serviceMethod, annotationAttributeName);\r\n+        String[] value = getValue(annotation);\r\n+        if (value != null) {\r\n+            Stream.of(value).forEach(result::add);\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,34 +1,34 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\n- *\n- * @since 2.7.6\n- */\n-public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,38 +1,38 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\n- */\n-public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        requestMetadata.addParam(name, defaultValue);\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\r\n+ */\r\n+public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        requestMetadata.addParam(name, defaultValue);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,34 +1,34 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\n- *\n- * @since 2.7.6\n- */\n-public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,71 +1,71 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.common.utils.AnnotationUtils;\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Parameter;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\n- */\n-public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        // try to get \"value\" attribute first\n-        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\n-\n-        // try to get \"name\" attribute if required\n-        if (isEmpty(name)) {\n-            name = getAttribute(annotation, \"name\");\n-        }\n-\n-        // finally , try to the name of parameter\n-        if (isEmpty(name)) {\n-            name = parameter.getName();\n-        }\n-\n-        return name;\n-    }\n-\n-    @Override\n-    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        String attributeName = \"defaultValue\";\n-        String attributeValue = getAttribute(annotation, attributeName);\n-\n-        if (isEmpty(attributeValue) || isDefaultValue(annotation, attributeName, attributeValue)) {\n-            attributeValue = super.getDefaultValue(annotation, parameter, parameterIndex);\n-        }\n-        return attributeValue;\n-    }\n-\n-    private boolean isDefaultValue(Annotation annotation, String attributeName, Object attributeValue) {\n-        String defaultValue = AnnotationUtils.getDefaultValue(annotation, attributeName);\n-        return Objects.equals(attributeValue, defaultValue);\n-    }\n-\n-    protected boolean isEmpty(String str) {\n-        return str == null || str.isEmpty();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.common.utils.AnnotationUtils;\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Parameter;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\r\n+ */\r\n+public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        // try to get \"value\" attribute first\r\n+        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\r\n+\r\n+        // try to get \"name\" attribute if required\r\n+        if (isEmpty(name)) {\r\n+            name = getAttribute(annotation, \"name\");\r\n+        }\r\n+\r\n+        // finally , try to the name of parameter\r\n+        if (isEmpty(name)) {\r\n+            name = parameter.getName();\r\n+        }\r\n+\r\n+        return name;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        String attributeName = \"defaultValue\";\r\n+        String attributeValue = getAttribute(annotation, attributeName);\r\n+\r\n+        if (isEmpty(attributeValue) || isDefaultValue(annotation, attributeName, attributeValue)) {\r\n+            attributeValue = super.getDefaultValue(annotation, parameter, parameterIndex);\r\n+        }\r\n+        return attributeValue;\r\n+    }\r\n+\r\n+    private boolean isDefaultValue(Annotation annotation, String attributeName, Object attributeValue) {\r\n+        String defaultValue = AnnotationUtils.getDefaultValue(annotation, attributeName);\r\n+        return Objects.equals(attributeValue, defaultValue);\r\n+    }\r\n+\r\n+    protected boolean isEmpty(String str) {\r\n+        return str == null || str.isEmpty();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,43 +1,43 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\n- */\n-public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addHeader(name, defaultValue);\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\r\n+ */\r\n+public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addHeader(name, defaultValue);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,43 +1,43 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\n- */\n-public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, Annotation annotation, Object parameter, int parameterIndex,\n-                           Method method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addParam(name, defaultValue);\n-\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\r\n+ */\r\n+public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, Annotation annotation, Object parameter, int parameterIndex,\r\n+                           Method method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addParam(name, defaultValue);\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,141 +1,141 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.AnnotatedElement;\n-import java.lang.reflect.Array;\n-import java.lang.reflect.Method;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.lang.reflect.Array.getLength;\n-import static java.util.stream.Stream.of;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\n-import static org.apache.dubbo.common.utils.MethodUtils.findMethod;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.ANNOTATED_ELEMENT_UTILS_CLASS;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS;\n-\n-/**\n- * {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    private static final int FIRST_ELEMENT_INDEX = 0;\n-\n-    @Override\n-    protected boolean supports0(Class<?> serviceType) {\n-        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS);\n-    }\n-\n-    @Override\n-    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return isAnnotationPresent(serviceType, REQUEST_MAPPING_ANNOTATION_CLASS) ||\n-                isAnnotationPresent(serviceMethod, REQUEST_MAPPING_ANNOTATION_CLASS);\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Annotation requestMapping = getRequestMapping(serviceMethod);\n-\n-        // httpMethod is an array of RequestMethod\n-        Object httpMethod = getAttribute(requestMapping, \"method\");\n-\n-        if (httpMethod == null || getLength(httpMethod) < 1) {\n-            return null;\n-        }\n-\n-        // TODO Is is required to support more request methods?\n-        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        String requestBasePath = resolveRequestPath(serviceType);\n-        String requestRelativePath = resolveRequestPath(serviceMethod);\n-        return buildPath(requestBasePath, requestRelativePath);\n-    }\n-\n-    @Override\n-    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\n-        addMediaTypes(serviceMethod, \"produces\", produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\n-        addMediaTypes(serviceMethod, \"consumes\", consumes);\n-    }\n-\n-    private String resolveRequestPath(AnnotatedElement annotatedElement) {\n-        Annotation mappingAnnotation = getRequestMapping(annotatedElement);\n-\n-        // try \"value\" first\n-        String[] value = getAttribute(mappingAnnotation, \"value\");\n-\n-        if (isEmpty(value)) { // try \"path\" later\n-            value = getAttribute(mappingAnnotation, \"path\");\n-        }\n-\n-        if (isEmpty(value)) {\n-            return \"\";\n-        }\n-        // TODO Is is required to support more request paths?\n-        return value[FIRST_ELEMENT_INDEX];\n-    }\n-\n-    private void addMediaTypes(Method serviceMethod, String annotationAttributeName, Set<String> mediaTypesSet) {\n-\n-        Annotation mappingAnnotation = getRequestMapping(serviceMethod);\n-\n-        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\n-\n-        if (isNotEmpty(mediaTypes)) {\n-            of(mediaTypes).forEach(mediaTypesSet::add);\n-        }\n-    }\n-\n-    private Annotation getRequestMapping(AnnotatedElement annotatedElement) {\n-        // try \"@RequestMapping\" first\n-        Annotation requestMapping = findAnnotation(annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\n-        if (requestMapping == null) {\n-            // To try the meta-annotated annotation if can't be found.\n-            // For example, if the annotation \"@GetMapping\" is used in the Spring Framework is 4.2 or above,\n-            // because of \"@GetMapping\" alias for (\"@AliasFor\") \"@RequestMapping\" , both of them belongs to\n-            // the artifact \"spring-web\" which depends on \"spring-core\", thus Spring core's\n-            // AnnotatedElementUtils.findMergedAnnotation(AnnotatedElement, Class) must be involved.\n-            Method method = findMethod(ANNOTATED_ELEMENT_UTILS_CLASS, \"findMergedAnnotation\", AnnotatedElement.class, Class.class);\n-            if (method != null) {\n-                try {\n-                    requestMapping = (Annotation) method.invoke(null, annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\n-                } catch (Exception ignored) {\n-                }\n-            }\n-        }\n-        return requestMapping;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.AnnotatedElement;\r\n+import java.lang.reflect.Array;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.lang.reflect.Array.getLength;\r\n+import static java.util.stream.Stream.of;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.findMethod;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.ANNOTATED_ELEMENT_UTILS_CLASS;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS;\r\n+\r\n+/**\r\n+ * {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    private static final int FIRST_ELEMENT_INDEX = 0;\r\n+\r\n+    @Override\r\n+    protected boolean supports0(Class<?> serviceType) {\r\n+        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return isAnnotationPresent(serviceType, REQUEST_MAPPING_ANNOTATION_CLASS) ||\r\n+                isAnnotationPresent(serviceMethod, REQUEST_MAPPING_ANNOTATION_CLASS);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Annotation requestMapping = getRequestMapping(serviceMethod);\r\n+\r\n+        // httpMethod is an array of RequestMethod\r\n+        Object httpMethod = getAttribute(requestMapping, \"method\");\r\n+\r\n+        if (httpMethod == null || getLength(httpMethod) < 1) {\r\n+            return null;\r\n+        }\r\n+\r\n+        // TODO Is is required to support more request methods?\r\n+        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        String requestBasePath = resolveRequestPath(serviceType);\r\n+        String requestRelativePath = resolveRequestPath(serviceMethod);\r\n+        return buildPath(requestBasePath, requestRelativePath);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\r\n+        addMediaTypes(serviceMethod, \"produces\", produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\r\n+        addMediaTypes(serviceMethod, \"consumes\", consumes);\r\n+    }\r\n+\r\n+    private String resolveRequestPath(AnnotatedElement annotatedElement) {\r\n+        Annotation mappingAnnotation = getRequestMapping(annotatedElement);\r\n+\r\n+        // try \"value\" first\r\n+        String[] value = getAttribute(mappingAnnotation, \"value\");\r\n+\r\n+        if (isEmpty(value)) { // try \"path\" later\r\n+            value = getAttribute(mappingAnnotation, \"path\");\r\n+        }\r\n+\r\n+        if (isEmpty(value)) {\r\n+            return \"\";\r\n+        }\r\n+        // TODO Is is required to support more request paths?\r\n+        return value[FIRST_ELEMENT_INDEX];\r\n+    }\r\n+\r\n+    private void addMediaTypes(Method serviceMethod, String annotationAttributeName, Set<String> mediaTypesSet) {\r\n+\r\n+        Annotation mappingAnnotation = getRequestMapping(serviceMethod);\r\n+\r\n+        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\r\n+\r\n+        if (isNotEmpty(mediaTypes)) {\r\n+            of(mediaTypes).forEach(mediaTypesSet::add);\r\n+        }\r\n+    }\r\n+\r\n+    private Annotation getRequestMapping(AnnotatedElement annotatedElement) {\r\n+        // try \"@RequestMapping\" first\r\n+        Annotation requestMapping = findAnnotation(annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\r\n+        if (requestMapping == null) {\r\n+            // To try the meta-annotated annotation if can't be found.\r\n+            // For example, if the annotation \"@GetMapping\" is used in the Spring Framework is 4.2 or above,\r\n+            // because of \"@GetMapping\" alias for (\"@AliasFor\") \"@RequestMapping\" , both of them belongs to\r\n+            // the artifact \"spring-web\" which depends on \"spring-core\", thus Spring core's\r\n+            // AnnotatedElementUtils.findMergedAnnotation(AnnotatedElement, Class) must be involved.\r\n+            Method method = findMethod(ANNOTATED_ELEMENT_UTILS_CLASS, \"findMergedAnnotation\", AnnotatedElement.class, Class.class);\r\n+            if (method != null) {\r\n+                try {\r\n+                    requestMapping = (Annotation) method.invoke(null, annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\r\n+                } catch (Exception ignored) {\r\n+                }\r\n+            }\r\n+        }\r\n+        return requestMapping;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java", "source2": "org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,100 +1,100 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.store;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.metadata.WritableMetadataService;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-\n-import com.google.gson.Gson;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PID_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMESTAMP_KEY;\n-import static org.apache.dubbo.common.utils.ClassUtils.forName;\n-import static org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder.buildFullDefinition;\n-import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;\n-import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;\n-import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\n-import static org.apache.dubbo.rpc.support.ProtocolUtils.isGeneric;\n-\n-/**\n- * The abstract implementation of {@link WritableMetadataService}\n- *\n- * @see WritableMetadataService\n- * @since 2.7.8\n- */\n-public abstract class AbstractAbstractWritableMetadataService implements WritableMetadataService {\n-\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    @Override\n-    public void publishServiceDefinition(URL url) {\n-        if (SERVICE_INTERFACE_NAME.equals(url.getServiceInterface())) { // Ignore the interface \"MetadataService\"\n-            return;\n-        }\n-\n-        // Remove the useless parameters\n-        url = url.removeParameters(PID_KEY, TIMESTAMP_KEY, BIND_IP_KEY, BIND_PORT_KEY, TIMESTAMP_KEY);\n-\n-        String side = url.getParameter(SIDE_KEY);\n-        if (PROVIDER_SIDE.equalsIgnoreCase(side)) {\n-            publishProviderServiceDefinition(url);\n-        } else {\n-            publishConsumerParameters(url);\n-        }\n-    }\n-\n-    protected void publishProviderServiceDefinition(URL url) {\n-        String serviceDefinition = getServiceDefinition(url);\n-        if (!StringUtils.isBlank(serviceDefinition)) {\n-            publishServiceDefinition(url.getServiceKey(), serviceDefinition);\n-        }\n-    }\n-\n-    protected String getServiceDefinition(URL exportedURL) {\n-        String interfaceName = exportedURL.getParameter(INTERFACE_KEY);\n-        String json = null;\n-        try {\n-            if (StringUtils.isNotEmpty(interfaceName) && !isGeneric(exportedURL.getParameter(GENERIC_KEY))) {\n-                Class interfaceClass = forName(interfaceName);\n-                ServiceDefinition serviceDefinition = buildFullDefinition(interfaceClass, exportedURL.getParameters());\n-                Gson gson = new Gson();\n-                json = gson.toJson(serviceDefinition);\n-            }\n-        } catch (ClassNotFoundException e) {\n-            //ignore error\n-            if (logger.isErrorEnabled()) {\n-                logger.error(\"The interface class[name : \" + interfaceName + \"] can't be found , providerUrl: \"\n-                        + exportedURL.toFullString());\n-            }\n-        }\n-        return json;\n-    }\n-\n-    protected void publishConsumerParameters(URL url) {\n-    }\n-\n-    protected void publishServiceDefinition(String key, String json) {\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.store;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.metadata.WritableMetadataService;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PID_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMESTAMP_KEY;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.forName;\r\n+import static org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder.buildFullDefinition;\r\n+import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\r\n+import static org.apache.dubbo.rpc.support.ProtocolUtils.isGeneric;\r\n+\r\n+/**\r\n+ * The abstract implementation of {@link WritableMetadataService}\r\n+ *\r\n+ * @see WritableMetadataService\r\n+ * @since 2.7.8\r\n+ */\r\n+public abstract class AbstractAbstractWritableMetadataService implements WritableMetadataService {\r\n+\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    @Override\r\n+    public void publishServiceDefinition(URL url) {\r\n+        if (SERVICE_INTERFACE_NAME.equals(url.getServiceInterface())) { // Ignore the interface \"MetadataService\"\r\n+            return;\r\n+        }\r\n+\r\n+        // Remove the useless parameters\r\n+        url = url.removeParameters(PID_KEY, TIMESTAMP_KEY, BIND_IP_KEY, BIND_PORT_KEY, TIMESTAMP_KEY);\r\n+\r\n+        String side = url.getParameter(SIDE_KEY);\r\n+        if (PROVIDER_SIDE.equalsIgnoreCase(side)) {\r\n+            publishProviderServiceDefinition(url);\r\n+        } else {\r\n+            publishConsumerParameters(url);\r\n+        }\r\n+    }\r\n+\r\n+    protected void publishProviderServiceDefinition(URL url) {\r\n+        String serviceDefinition = getServiceDefinition(url);\r\n+        if (!StringUtils.isBlank(serviceDefinition)) {\r\n+            publishServiceDefinition(url.getServiceKey(), serviceDefinition);\r\n+        }\r\n+    }\r\n+\r\n+    protected String getServiceDefinition(URL exportedURL) {\r\n+        String interfaceName = exportedURL.getParameter(INTERFACE_KEY);\r\n+        String json = null;\r\n+        try {\r\n+            if (StringUtils.isNotEmpty(interfaceName) && !isGeneric(exportedURL.getParameter(GENERIC_KEY))) {\r\n+                Class interfaceClass = forName(interfaceName);\r\n+                ServiceDefinition serviceDefinition = buildFullDefinition(interfaceClass, exportedURL.getParameters());\r\n+                Gson gson = new Gson();\r\n+                json = gson.toJson(serviceDefinition);\r\n+            }\r\n+        } catch (ClassNotFoundException e) {\r\n+            //ignore error\r\n+            if (logger.isErrorEnabled()) {\r\n+                logger.error(\"The interface class[name : \" + interfaceName + \"] can't be found , providerUrl: \"\r\n+                        + exportedURL.toFullString());\r\n+            }\r\n+        }\r\n+        return json;\r\n+    }\r\n+\r\n+    protected void publishConsumerParameters(URL url) {\r\n+    }\r\n+\r\n+    protected void publishServiceDefinition(String key, String json) {\r\n+    }\r\n+\r\n+}\r\n"}]}
