6101606040523480156200001257600080fd5b506040518060400160405280600881526020017f436f6d6d7544414f000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f436f6d6d7544414f0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f434d4400000000000000000000000000000000000000000000000000000000008152508160039081620000fd91906200134b565b5080600490816200010f91906200134b565b50505062000128600583620001e660201b90919060201c565b610120818152505062000146600682620001e660201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001856200023e60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050505050620001e0336a52b7d2dcc80cd2e40000006200029b60201b60201c565b6200195b565b60006020835110156200020c5762000204836200032860201b60201c565b905062000238565b826200021e836200039560201b60201c565b60000190816200022f91906200134b565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e05161010051463060405160200162000280959493929190620014a3565b60405160208183030381529060405280519060200120905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003105760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000307919062001500565b60405180910390fd5b62000324600083836200039f60201b60201c565b5050565b600080829050601f815111156200037857826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016200036f9190620015ac565b60405180910390fd5b805181620003869062001602565b60001c1760001b915050919050565b6000819050919050565b620003b2838383620003b760201b60201c565b505050565b620003ca8383836200048c60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200047457600062000411620006bc60201b60201c565b9050600062000425620006c660201b60201c565b905080821115620004715781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016200046892919062001672565b60405180910390fd5b50505b62000487838383620006ea60201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620004e2578060026000828254620004d59190620016ce565b92505081905550620005b8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000571578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620005689392919062001709565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000603578060026000828254039250508190555062000650565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006af919062001746565b60405180910390a3505050565b6000600254905090565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000751576200074e600a620007f060201b62000d621762000742846200080860201b60201c565b6200087960201b60201c565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007b857620007b5600a620008c960201b62000d7817620007a9846200080860201b60201c565b6200087960201b60201c565b50505b620007eb620007cd84620008e160201b60201c565b620007de84620008e160201b60201c565b836200094a60201b60201c565b505050565b6000818362000800919062001789565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115620008715760d0826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401620008689291906200182e565b60405180910390fd5b819050919050565b600080620008bd6200089062000bfd60201b60201c565b620008ac620008a58862000c1460201b60201c565b868860201c565b8762000c8860201b9092919060201c565b91509150935093915050565b60008183620008d991906200185b565b905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620009875750600081115b1562000bf857600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000ac25760008062000a31600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020620008c960201b62000d781762000a25866200080860201b60201c565b6200087960201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000ab792919062001672565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000bf75760008062000b66600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020620007f060201b62000d621762000b5a866200080860201b60201c565b6200087960201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000bec92919062001672565b60405180910390a250505b5b505050565b600062000c0f62000cad60201b60201c565b905090565b600080826000018054905090506000811462000c7d5762000c4d8360000160018362000c419190620018b0565b62000cc560201b60201c565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1662000c80565b60005b915050919050565b60008062000ca185600001858562000cda60201b60201c565b91509150935093915050565b600062000cc0436200107460201b60201c565b905090565b60008260005281602060002001905092915050565b600080600085805490509050600081111562000f8457600062000d128760018462000d069190620018b0565b62000cc560201b60201c565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff16111562000e02576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff160362000e92578462000e3f8860018562000e339190620018b0565b62000cc560201b60201c565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555062000f72565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b8060200151859350935050506200106c565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b600065ffffffffffff8016821115620010c9576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401620010c09291906200192e565b60405180910390fd5b819050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200115357607f821691505b6020821081036200116957620011686200110b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620011d37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001194565b620011df868362001194565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200122c620012266200122084620011f7565b62001201565b620011f7565b9050919050565b6000819050919050565b62001248836200120b565b62001260620012578262001233565b848454620011a1565b825550505050565b600090565b6200127762001268565b620012848184846200123d565b505050565b5b81811015620012ac57620012a06000826200126d565b6001810190506200128a565b5050565b601f821115620012fb57620012c5816200116f565b620012d08462001184565b81016020851015620012e0578190505b620012f8620012ef8562001184565b83018262001289565b50505b505050565b600082821c905092915050565b6000620013206000198460080262001300565b1980831691505092915050565b60006200133b83836200130d565b9150826002028217905092915050565b6200135682620010d1565b67ffffffffffffffff811115620013725762001371620010dc565b5b6200137e82546200113a565b6200138b828285620012b0565b600060209050601f831160018114620013c35760008415620013ae578287015190505b620013ba85826200132d565b8655506200142a565b601f198416620013d3866200116f565b60005b82811015620013fd57848901518255600182019150602085019450602081019050620013d6565b868310156200141d578489015162001419601f8916826200130d565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b620014478162001432565b82525050565b6200145881620011f7565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200148b826200145e565b9050919050565b6200149d816200147e565b82525050565b600060a082019050620014ba60008301886200143c565b620014c960208301876200143c565b620014d860408301866200143c565b620014e760608301856200144d565b620014f6608083018462001492565b9695505050505050565b600060208201905062001517600083018462001492565b92915050565b600082825260208201905092915050565b60005b838110156200154e57808201518184015260208101905062001531565b60008484015250505050565b6000601f19601f8301169050919050565b60006200157882620010d1565b6200158481856200151d565b9350620015968185602086016200152e565b620015a1816200155a565b840191505092915050565b60006020820190508181036000830152620015c881846200156b565b905092915050565b600081519050919050565b6000819050602082019050919050565b6000620015f9825162001432565b80915050919050565b60006200160f82620015d0565b826200161b84620015db565b90506200162881620015eb565b925060208210156200166b57620016667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262001194565b831692505b5050919050565b60006040820190506200168960008301856200144d565b6200169860208301846200144d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620016db82620011f7565b9150620016e883620011f7565b92508282019050808211156200170357620017026200169f565b5b92915050565b600060608201905062001720600083018662001492565b6200172f60208301856200144d565b6200173e60408301846200144d565b949350505050565b60006020820190506200175d60008301846200144d565b92915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620017968262001763565b9150620017a38362001763565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115620017d857620017d76200169f565b5b92915050565b6000819050919050565b600060ff82169050919050565b600062001816620018106200180a84620017de565b62001201565b620017e8565b9050919050565b6200182881620017f5565b82525050565b60006040820190506200184560008301856200181d565b6200185460208301846200144d565b9392505050565b6000620018688262001763565b9150620018758362001763565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115620018aa57620018a96200169f565b5b92915050565b6000620018bd82620011f7565b9150620018ca83620011f7565b9250828203905081811115620018e557620018e46200169f565b5b92915050565b6000819050919050565b600062001916620019106200190a84620018eb565b62001201565b620017e8565b9050919050565b6200192881620018f5565b82525050565b60006040820190506200194560008301856200191d565b6200195460208301846200144d565b9392505050565b60805160a05160c05160e051610100516101205161014051613868620019b6600039600061130d015260006112d20152600061172e0152600061170d01526000610f3401526000610f8a01526000610fb301526138686000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c35780639ab24eb01161007c5780639ab24eb0146103e4578063a9059cbb14610414578063c3cda52014610444578063d505accf14610460578063dd62ed3e1461047c578063f1127ed8146104ac5761014d565b806370a08231146102f45780637ecebe001461032457806384b0196e146103545780638e539e8c1461037857806391ddadf4146103a857806395d89b41146103c65761014d565b80633644e515116101155780633644e5151461020c5780633a46b1a81461022a5780634bf5d7e91461025a578063587cde1e146102785780635c19a95c146102a85780636fcfff45146102c45761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a6104dc565b6040516101679190612b12565b60405180910390f35b61018a60048036038101906101859190612bcd565b61056e565b6040516101979190612c28565b60405180910390f35b6101a8610591565b6040516101b59190612c52565b60405180910390f35b6101d860048036038101906101d39190612c6d565b61059b565b6040516101e59190612c28565b60405180910390f35b6101f66105ca565b6040516102039190612cdc565b60405180910390f35b6102146105d3565b6040516102219190612d10565b60405180910390f35b610244600480360381019061023f9190612bcd565b6105e2565b6040516102519190612c52565b60405180910390f35b6102626106bb565b60405161026f9190612b12565b60405180910390f35b610292600480360381019061028d9190612d2b565b61074f565b60405161029f9190612d67565b60405180910390f35b6102c260048036038101906102bd9190612d2b565b6107b8565b005b6102de60048036038101906102d99190612d2b565b6107d2565b6040516102eb9190612da1565b60405180910390f35b61030e60048036038101906103099190612d2b565b6107e4565b60405161031b9190612c52565b60405180910390f35b61033e60048036038101906103399190612d2b565b61082c565b60405161034b9190612c52565b60405180910390f35b61035c61083e565b60405161036f9796959493929190612eb5565b60405180910390f35b610392600480360381019061038d9190612f39565b6108e8565b60405161039f9190612c52565b60405180910390f35b6103b0610983565b6040516103bd9190612f87565b60405180910390f35b6103ce610992565b6040516103db9190612b12565b60405180910390f35b6103fe60048036038101906103f99190612d2b565b610a24565b60405161040b9190612c52565b60405180910390f35b61042e60048036038101906104299190612bcd565b610a90565b60405161043b9190612c28565b60405180910390f35b61045e60048036038101906104599190612ffa565b610ab3565b005b61047a60048036038101906104759190613087565b610b79565b005b61049660048036038101906104919190613129565b610cc1565b6040516104a39190612c52565b60405180910390f35b6104c660048036038101906104c19190613195565b610d48565b6040516104d39190613248565b60405180910390f35b6060600380546104eb90613292565b80601f016020809104026020016040519081016040528092919081815260200182805461051790613292565b80156105645780601f1061053957610100808354040283529160200191610564565b820191906000526020600020905b81548152906001019060200180831161054757829003601f168201915b5050505050905090565b600080610579610d8e565b9050610586818585610d96565b600191505092915050565b6000600254905090565b6000806105a6610d8e565b90506105b3858285610da8565b6105be858585610e3c565b60019150509392505050565b60006012905090565b60006105dd610f30565b905090565b6000806105ed610983565b90508065ffffffffffff16831061063d5782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016106349291906132c3565b60405180910390fd5b61069661064984610fe7565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061104190919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b60606106c561113b565b65ffffffffffff166106d5610983565b65ffffffffffff1614610714576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107c2610d8e565b90506107ce818361114b565b5050565b60006107dd8261125f565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610837826112b7565b9050919050565b6000606080600080600060606108526112c9565b61085a611304565b46306000801b600067ffffffffffffffff81111561087b5761087a6132ec565b5b6040519080825280602002602001820160405280156108a95781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6000806108f3610983565b90508065ffffffffffff1683106109435782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161093a9291906132c3565b60405180910390fd5b61095f61094f84610fe7565b600a61104190919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b600061098d61113b565b905090565b6060600480546109a190613292565b80601f01602080910402602001604051908101604052809291908181526020018280546109cd90613292565b8015610a1a5780601f106109ef57610100808354040283529160200191610a1a565b820191906000526020600020905b8154815290600101906020018083116109fd57829003601f168201915b5050505050905090565b6000610a6d600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061133f565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b600080610a9b610d8e565b9050610aa8818585610e3c565b600191505092915050565b83421115610af857836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610aef9190612c52565b60405180910390fd5b6000610b5a610b527fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610b37949392919061331b565b604051602081830303815290604052805190602001206113a7565b8585856113c1565b9050610b6681876113f1565b610b70818861114b565b50505050505050565b83421115610bbe57836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610bb59190612c52565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610bed8c611449565b89604051602001610c0396959493929190613360565b6040516020818303038152906040528051906020012090506000610c26826113a7565b90506000610c36828787876113c1565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610caa57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610ca19291906133c1565b60405180910390fd5b610cb58a8a8a610d96565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d50612a44565b610d5a83836114a0565b905092915050565b60008183610d709190613419565b905092915050565b60008183610d869190613467565b905092915050565b600033905090565b610da38383836001611501565b505050565b6000610db48484610cc1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e365781811015610e26578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610e1d939291906134b5565b60405180910390fd5b610e3584848484036000611501565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eae5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610ea59190612d67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f205760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f179190612d67565b60405180910390fd5b610f2b8383836116d8565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610fac57507f000000000000000000000000000000000000000000000000000000000000000046145b15610fd9577f00000000000000000000000000000000000000000000000000000000000000009050610fe4565b610fe16116e8565b90505b90565b600065ffffffffffff8016821115611039576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611030929190613531565b60405180910390fd5b819050919050565b6000808360000180549050905060008082905060058311156110c95760006110688461177e565b84611073919061355a565b90506110828760000182611877565b60000160009054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156110b7578091506110c7565b6001816110c4919061358e565b92505b505b60006110da8760000187858561188c565b90506000811461112c576110fd876000016001836110f8919061355a565b611877565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1661112f565b60005b94505050505092915050565b600061114643610fe7565b905090565b60006111568361074f565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461125a818361125586611905565b611917565b505050565b60006112b06112ab600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611b90565b611ba1565b9050919050565b60006112c282611bf9565b9050919050565b60606112ff60057f0000000000000000000000000000000000000000000000000000000000000000611c4290919063ffffffff16565b905090565b606061133a60067f0000000000000000000000000000000000000000000000000000000000000000611c4290919063ffffffff16565b905090565b600080826000018054905090506000811461139c5761136d83600001600183611368919061355a565b611877565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1661139f565b60005b915050919050565b60006113ba6113b4610f30565b83611cf2565b9050919050565b6000806000806113d388888888611d33565b9250925092506113e38282611e27565b829350505050949350505050565b60006113fc83611449565b90508082146114445782816040517f752d88c000000000000000000000000000000000000000000000000000000000815260040161143b9291906135c2565b60405180910390fd5b505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b6114a8612a44565b6114f982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f8b90919063ffffffff16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115735760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161156a9190612d67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115e55760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016115dc9190612d67565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156116d2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516116c99190612c52565b60405180910390a35b50505050565b6116e3838383612060565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016117639594939291906135eb565b60405160208183030381529060405280519060200120905090565b60008082036117905760009050611872565b6000600161179d84612111565b901c6001901b905060018184816117b7576117b661363e565b5b048201901c905060018184816117d0576117cf61363e565b5b048201901c905060018184816117e9576117e861363e565b5b048201901c905060018184816118025761180161363e565b5b048201901c9050600181848161181b5761181a61363e565b5b048201901c905060018184816118345761183361363e565b5b048201901c9050600181848161184d5761184c61363e565b5b048201901c905061186e818285816118685761186761363e565b5b046121f2565b9150505b919050565b60008260005281602060002001905092915050565b60005b818310156118fa5760006118a3848461220b565b90508465ffffffffffff166118b88783611877565b60000160009054906101000a900465ffffffffffff1665ffffffffffff1611156118e4578092506118f4565b6001816118f1919061358e565b93505b5061188f565b819050949350505050565b6000611910826107e4565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119535750600081115b15611b8b57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a71576000806119e2600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610d786119dd86612231565b61229f565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611a6692919061366d565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611b8a57600080611afb600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610d62611af686612231565b61229f565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b7f92919061366d565b60405180910390a250505b5b505050565b600081600001805490509050919050565b600063ffffffff8016821115611bf1576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611be89291906136d1565b60405180910390fd5b819050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060ff60001b8314611c5f57611c58836122df565b9050611cec565b818054611c6b90613292565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9790613292565b8015611ce45780601f10611cb957610100808354040283529160200191611ce4565b820191906000526020600020905b815481529060010190602001808311611cc757829003601f168201915b505050505090505b92915050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115611d73576000600385925092509250611e1d565b600060018888888860405160008152602001604052604051611d9894939291906136fa565b6020604051602081039080840390855afa158015611dba573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e0e57600060016000801b93509350935050611e1d565b8060008060001b935093509350505b9450945094915050565b60006003811115611e3b57611e3a61373f565b5b826003811115611e4e57611e4d61373f565b5b0315611f875760016003811115611e6857611e6761373f565b5b826003811115611e7b57611e7a61373f565b5b03611eb2576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611ec657611ec561373f565b5b826003811115611ed957611ed861373f565b5b03611f1e578060001c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611f159190612c52565b60405180910390fd5b600380811115611f3157611f3061373f565b5b826003811115611f4457611f4361373f565b5b03611f8657806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611f7d9190612d10565b60405180910390fd5b5b5050565b611f93612a44565b826000018263ffffffff1681548110611faf57611fae61376e565b5b906000526020600020016040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61206b838383612353565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121015760006120a9610591565b905060006120b5612578565b9050808211156120fe5781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016120f592919061366d565b60405180910390fd5b50505b61210c83838361259c565b505050565b600080600090506000608084901c111561213357608083901c92506080810190505b6000604084901c111561214e57604083901c92506040810190505b6000602084901c111561216957602083901c92506020810190505b6000601084901c111561218457601083901c92506010810190505b6000600884901c111561219f57600883901c92506008810190505b6000600484901c11156121ba57600483901c92506004810190505b6000600284901c11156121d557600283901c92506002810190505b6000600184901c11156121e9576001810190505b80915050919050565b60008183106122015781612203565b825b905092915050565b6000600282841861221c919061379d565b828416612229919061358e565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156122975760d0826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161228e929190613809565b60405180910390fd5b819050919050565b6000806122d36122ad610983565b6122c36122b98861133f565b868863ffffffff16565b876126569092919063ffffffff16565b91509150935093915050565b606060006122ec83612673565b90506000602067ffffffffffffffff81111561230b5761230a6132ec565b5b6040519080825280601f01601f19166020018201604052801561233d5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123a5578060026000828254612399919061358e565b92505081905550612478565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612431578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612428939291906134b5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c1578060026000828254039250508190555061250e565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161256b9190612c52565b60405180910390a3505050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125e9576125e6600a610d626125e184612231565b61229f565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361263657612633600a610d7861262e84612231565b61229f565b50505b6126516126428461074f565b61264b8461074f565b83611917565b505050565b6000806126678560000185856126c3565b91509150935093915050565b60008060ff8360001c169050601f8111156126ba576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b60008060008580549050905060008111156129545760006126f0876001846126eb919061355a565b611877565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff1611156127df576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff160361286357846128118860018561280c919061355a565b611877565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612943565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612a3c565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b6040518060400160405280600065ffffffffffff168152602001600079ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612abc578082015181840152602081019050612aa1565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ae482612a82565b612aee8185612a8d565b9350612afe818560208601612a9e565b612b0781612ac8565b840191505092915050565b60006020820190508181036000830152612b2c8184612ad9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b6482612b39565b9050919050565b612b7481612b59565b8114612b7f57600080fd5b50565b600081359050612b9181612b6b565b92915050565b6000819050919050565b612baa81612b97565b8114612bb557600080fd5b50565b600081359050612bc781612ba1565b92915050565b60008060408385031215612be457612be3612b34565b5b6000612bf285828601612b82565b9250506020612c0385828601612bb8565b9150509250929050565b60008115159050919050565b612c2281612c0d565b82525050565b6000602082019050612c3d6000830184612c19565b92915050565b612c4c81612b97565b82525050565b6000602082019050612c676000830184612c43565b92915050565b600080600060608486031215612c8657612c85612b34565b5b6000612c9486828701612b82565b9350506020612ca586828701612b82565b9250506040612cb686828701612bb8565b9150509250925092565b600060ff82169050919050565b612cd681612cc0565b82525050565b6000602082019050612cf16000830184612ccd565b92915050565b6000819050919050565b612d0a81612cf7565b82525050565b6000602082019050612d256000830184612d01565b92915050565b600060208284031215612d4157612d40612b34565b5b6000612d4f84828501612b82565b91505092915050565b612d6181612b59565b82525050565b6000602082019050612d7c6000830184612d58565b92915050565b600063ffffffff82169050919050565b612d9b81612d82565b82525050565b6000602082019050612db66000830184612d92565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612df181612dbc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612e2c81612b97565b82525050565b6000612e3e8383612e23565b60208301905092915050565b6000602082019050919050565b6000612e6282612df7565b612e6c8185612e02565b9350612e7783612e13565b8060005b83811015612ea8578151612e8f8882612e32565b9750612e9a83612e4a565b925050600181019050612e7b565b5085935050505092915050565b600060e082019050612eca600083018a612de8565b8181036020830152612edc8189612ad9565b90508181036040830152612ef08188612ad9565b9050612eff6060830187612c43565b612f0c6080830186612d58565b612f1960a0830185612d01565b81810360c0830152612f2b8184612e57565b905098975050505050505050565b600060208284031215612f4f57612f4e612b34565b5b6000612f5d84828501612bb8565b91505092915050565b600065ffffffffffff82169050919050565b612f8181612f66565b82525050565b6000602082019050612f9c6000830184612f78565b92915050565b612fab81612cc0565b8114612fb657600080fd5b50565b600081359050612fc881612fa2565b92915050565b612fd781612cf7565b8114612fe257600080fd5b50565b600081359050612ff481612fce565b92915050565b60008060008060008060c0878903121561301757613016612b34565b5b600061302589828a01612b82565b965050602061303689828a01612bb8565b955050604061304789828a01612bb8565b945050606061305889828a01612fb9565b935050608061306989828a01612fe5565b92505060a061307a89828a01612fe5565b9150509295509295509295565b600080600080600080600060e0888a0312156130a6576130a5612b34565b5b60006130b48a828b01612b82565b97505060206130c58a828b01612b82565b96505060406130d68a828b01612bb8565b95505060606130e78a828b01612bb8565b94505060806130f88a828b01612fb9565b93505060a06131098a828b01612fe5565b92505060c061311a8a828b01612fe5565b91505092959891949750929550565b600080604083850312156131405761313f612b34565b5b600061314e85828601612b82565b925050602061315f85828601612b82565b9150509250929050565b61317281612d82565b811461317d57600080fd5b50565b60008135905061318f81613169565b92915050565b600080604083850312156131ac576131ab612b34565b5b60006131ba85828601612b82565b92505060206131cb85828601613180565b9150509250929050565b6131de81612f66565b82525050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b613213816131e4565b82525050565b60408201600082015161322f60008501826131d5565b506020820151613242602085018261320a565b50505050565b600060408201905061325d6000830184613219565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132aa57607f821691505b6020821081036132bd576132bc613263565b5b50919050565b60006040820190506132d86000830185612c43565b6132e56020830184612f78565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080820190506133306000830187612d01565b61333d6020830186612d58565b61334a6040830185612c43565b6133576060830184612c43565b95945050505050565b600060c0820190506133756000830189612d01565b6133826020830188612d58565b61338f6040830187612d58565b61339c6060830186612c43565b6133a96080830185612c43565b6133b660a0830184612c43565b979650505050505050565b60006040820190506133d66000830185612d58565b6133e36020830184612d58565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613424826131e4565b915061342f836131e4565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613461576134606133ea565b5b92915050565b6000613472826131e4565b915061347d836131e4565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156134af576134ae6133ea565b5b92915050565b60006060820190506134ca6000830186612d58565b6134d76020830185612c43565b6134e46040830184612c43565b949350505050565b6000819050919050565b6000819050919050565b600061351b613516613511846134ec565b6134f6565b612cc0565b9050919050565b61352b81613500565b82525050565b60006040820190506135466000830185613522565b6135536020830184612c43565b9392505050565b600061356582612b97565b915061357083612b97565b9250828203905081811115613588576135876133ea565b5b92915050565b600061359982612b97565b91506135a483612b97565b92508282019050808211156135bc576135bb6133ea565b5b92915050565b60006040820190506135d76000830185612d58565b6135e46020830184612c43565b9392505050565b600060a0820190506136006000830188612d01565b61360d6020830187612d01565b61361a6040830186612d01565b6136276060830185612c43565b6136346080830184612d58565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006040820190506136826000830185612c43565b61368f6020830184612c43565b9392505050565b6000819050919050565b60006136bb6136b66136b184613696565b6134f6565b612cc0565b9050919050565b6136cb816136a0565b82525050565b60006040820190506136e660008301856136c2565b6136f36020830184612c43565b9392505050565b600060808201905061370f6000830187612d01565b61371c6020830186612ccd565b6137296040830185612d01565b6137366060830184612d01565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006137a882612b97565b91506137b383612b97565b9250826137c3576137c261363e565b5b828204905092915050565b6000819050919050565b60006137f36137ee6137e9846137ce565b6134f6565b612cc0565b9050919050565b613803816137d8565b82525050565b600060408201905061381e60008301856137fa565b61382b6020830184612c43565b939250505056fea2646970667358221220d4baca5575e7ab1f0fea7ac14c2c1860047a1fa50af1fc0e969073f13569e8dc64736f6c63430008180033