Message ID | 20171225073912.30773-1-wen.he_1@nxp.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Hi Wen, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.15-rc5 next-20171222] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Wen-He/dmaengine-fsldma-Replace-DMA_IN-OUT-by-FSL_DMA_IN-OUT/20171226-000718 config: powerpc-ge_imp3a_defconfig (attached as .config) compiler: powerpc-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=powerpc All error/warnings (new ones prefixed by >>): In file included from drivers/dma/fsldma.c:41:0: >> drivers/dma/fsldma.h:229:13: error: conflicting types for 'ioread32' static void ioread32(const u32 __iomem *addr) ^~~~~~~~ In file included from arch/powerpc/include/asm/io.h:36:0, from include/linux/io.h:25, from include/linux/irq.h:25, from arch/powerpc/include/asm/hardirq.h:6, from include/linux/hardirq.h:9, from include/linux/interrupt.h:13, from include/linux/pci.h:32, from drivers/dma/fsldma.c:29: include/asm-generic/iomap.h:32:21: note: previous declaration of 'ioread32' was here extern unsigned int ioread32(void __iomem *); ^~~~~~~~ In file included from drivers/dma/fsldma.c:41:0: drivers/dma/fsldma.h: In function 'ioread32': >> drivers/dma/fsldma.h:231:9: warning: 'return' with a value, in function returning void return in_le32(addr); ^~~~~~~~~~~~~ drivers/dma/fsldma.h:229:13: note: declared here static void ioread32(const u32 __iomem *addr) ^~~~~~~~ drivers/dma/fsldma.h: At top level: >> drivers/dma/fsldma.h:234:13: error: conflicting types for 'iowrite32' static void iowrite32(u32 __iomem *addr, u32 val) ^~~~~~~~~ In file included from arch/powerpc/include/asm/io.h:36:0, from include/linux/io.h:25, from include/linux/irq.h:25, from arch/powerpc/include/asm/hardirq.h:6, from include/linux/hardirq.h:9, from include/linux/interrupt.h:13, from include/linux/pci.h:32, from drivers/dma/fsldma.c:29: include/asm-generic/iomap.h:42:13: note: previous declaration of 'iowrite32' was here extern void iowrite32(u32, void __iomem *); ^~~~~~~~~ In file included from drivers/dma/fsldma.c:41:0: >> drivers/dma/fsldma.h:239:13: error: conflicting types for 'ioread32be' static void ioread32be(const u32 __iomem *addr) ^~~~~~~~~~ In file included from arch/powerpc/include/asm/io.h:36:0, from include/linux/io.h:25, from include/linux/irq.h:25, from arch/powerpc/include/asm/hardirq.h:6, from include/linux/hardirq.h:9, from include/linux/interrupt.h:13, from include/linux/pci.h:32, from drivers/dma/fsldma.c:29: include/asm-generic/iomap.h:33:21: note: previous declaration of 'ioread32be' was here extern unsigned int ioread32be(void __iomem *); ^~~~~~~~~~ In file included from drivers/dma/fsldma.c:41:0: drivers/dma/fsldma.h: In function 'ioread32be': drivers/dma/fsldma.h:241:9: warning: 'return' with a value, in function returning void return in_be32(addr); ^~~~~~~~~~~~~ drivers/dma/fsldma.h:239:13: note: declared here static void ioread32be(const u32 __iomem *addr) ^~~~~~~~~~ drivers/dma/fsldma.h: At top level: >> drivers/dma/fsldma.h:244:13: error: conflicting types for 'iowrite32be' static void iowrite32be(u32 __iomem *addr, u32 val) ^~~~~~~~~~~ In file included from arch/powerpc/include/asm/io.h:36:0, from include/linux/io.h:25, from include/linux/irq.h:25, from arch/powerpc/include/asm/hardirq.h:6, from include/linux/hardirq.h:9, from include/linux/interrupt.h:13, from include/linux/pci.h:32, from drivers/dma/fsldma.c:29: include/asm-generic/iomap.h:43:13: note: previous declaration of 'iowrite32be' was here extern void iowrite32be(u32, void __iomem *); ^~~~~~~~~~~ In file included from drivers/dma/fsldma.c:41:0: drivers/dma/fsldma.c: In function 'set_sr': >> drivers/dma/fsldma.c:56:37: warning: passing argument 1 of 'iowrite32be' makes pointer from integer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->sr, val, 32); ^ drivers/dma/fsldma.h:256:23: note: in definition of macro 'FSL_DMA_OUT' iowrite##width##be(val, addr) : iowrite##width \ ^~~ drivers/dma/fsldma.h:244:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}' static void iowrite32be(u32 __iomem *addr, u32 val) ^~~~~~~~~~~ >> drivers/dma/fsldma.c:56:20: warning: passing argument 2 of 'iowrite32be' makes integer from pointer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->sr, val, 32); ^ drivers/dma/fsldma.h:256:28: note: in definition of macro 'FSL_DMA_OUT' iowrite##width##be(val, addr) : iowrite##width \ ^~~~ drivers/dma/fsldma.h:244:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}' static void iowrite32be(u32 __iomem *addr, u32 val) ^~~~~~~~~~~ >> drivers/dma/fsldma.c:56:37: warning: passing argument 1 of 'iowrite32' makes pointer from integer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->sr, val, 32); ^ drivers/dma/fsldma.h:257:5: note: in definition of macro 'FSL_DMA_OUT' (val, addr)) ^~~ drivers/dma/fsldma.h:234:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}' static void iowrite32(u32 __iomem *addr, u32 val) ^~~~~~~~~ >> drivers/dma/fsldma.c:56:20: warning: passing argument 2 of 'iowrite32' makes integer from pointer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->sr, val, 32); ^ drivers/dma/fsldma.h:257:10: note: in definition of macro 'FSL_DMA_OUT' (val, addr)) ^~~~ drivers/dma/fsldma.h:234:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}' static void iowrite32(u32 __iomem *addr, u32 val) ^~~~~~~~~ drivers/dma/fsldma.c: In function 'get_sr': >> drivers/dma/fsldma.h:252:28: error: void value not ignored as it ought to be (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ioread##width##be(addr) : ioread##width(addr)) ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ >> drivers/dma/fsldma.c:61:9: note: in expansion of macro 'FSL_DMA_IN' return FSL_DMA_IN(chan, &chan->regs->sr, 32); ^~~~~~~~~~ drivers/dma/fsldma.c: In function 'set_mr': drivers/dma/fsldma.c:66:37: warning: passing argument 1 of 'iowrite32be' makes pointer from integer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->mr, val, 32); ^ drivers/dma/fsldma.h:256:23: note: in definition of macro 'FSL_DMA_OUT' iowrite##width##be(val, addr) : iowrite##width \ ^~~ drivers/dma/fsldma.h:244:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}' static void iowrite32be(u32 __iomem *addr, u32 val) ^~~~~~~~~~~ drivers/dma/fsldma.c:66:20: warning: passing argument 2 of 'iowrite32be' makes integer from pointer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->mr, val, 32); ^ drivers/dma/fsldma.h:256:28: note: in definition of macro 'FSL_DMA_OUT' iowrite##width##be(val, addr) : iowrite##width \ ^~~~ drivers/dma/fsldma.h:244:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}' static void iowrite32be(u32 __iomem *addr, u32 val) ^~~~~~~~~~~ drivers/dma/fsldma.c:66:37: warning: passing argument 1 of 'iowrite32' makes pointer from integer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->mr, val, 32); ^ drivers/dma/fsldma.h:257:5: note: in definition of macro 'FSL_DMA_OUT' (val, addr)) ^~~ drivers/dma/fsldma.h:234:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}' static void iowrite32(u32 __iomem *addr, u32 val) ^~~~~~~~~ drivers/dma/fsldma.c:66:20: warning: passing argument 2 of 'iowrite32' makes integer from pointer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->mr, val, 32); ^ drivers/dma/fsldma.h:257:10: note: in definition of macro 'FSL_DMA_OUT' (val, addr)) ^~~~ drivers/dma/fsldma.h:234:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}' static void iowrite32(u32 __iomem *addr, u32 val) ^~~~~~~~~ drivers/dma/fsldma.c: In function 'get_mr': >> drivers/dma/fsldma.h:252:28: error: void value not ignored as it ought to be (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ioread##width##be(addr) : ioread##width(addr)) ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ drivers/dma/fsldma.c:71:9: note: in expansion of macro 'FSL_DMA_IN' return FSL_DMA_IN(chan, &chan->regs->mr, 32); ^~~~~~~~~~ drivers/dma/fsldma.c: In function 'set_cdar': >> drivers/dma/fsldma.h:256:4: error: implicit declaration of function 'iowrite64be'; did you mean 'iowrite32be'? [-Werror=implicit-function-declaration] iowrite##width##be(val, addr) : iowrite##width \ ^ >> drivers/dma/fsldma.c:76:2: note: in expansion of macro 'FSL_DMA_OUT' FSL_DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64); ^~~~~~~~~~~ >> drivers/dma/fsldma.h:256:36: error: implicit declaration of function 'iowrite64'; did you mean 'iowrite32'? [-Werror=implicit-function-declaration] iowrite##width##be(val, addr) : iowrite##width \ ^ >> drivers/dma/fsldma.c:76:2: note: in expansion of macro 'FSL_DMA_OUT' FSL_DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64); ^~~~~~~~~~~ drivers/dma/fsldma.c: In function 'get_cdar': >> drivers/dma/fsldma.h:252:4: error: implicit declaration of function 'ioread64be'; did you mean 'ioread32be'? [-Werror=implicit-function-declaration] ioread##width##be(addr) : ioread##width(addr)) ^ drivers/dma/fsldma.c:81:9: note: in expansion of macro 'FSL_DMA_IN' return FSL_DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN; ^~~~~~~~~~ >> drivers/dma/fsldma.h:252:30: error: implicit declaration of function 'ioread64'; did you mean 'ioread32'? [-Werror=implicit-function-declaration] ioread##width##be(addr) : ioread##width(addr)) ^ drivers/dma/fsldma.c:81:9: note: in expansion of macro 'FSL_DMA_IN' return FSL_DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN; ^~~~~~~~~~ drivers/dma/fsldma.c: In function 'set_bcr': drivers/dma/fsldma.c:86:38: warning: passing argument 1 of 'iowrite32be' makes pointer from integer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32); ^ drivers/dma/fsldma.h:256:23: note: in definition of macro 'FSL_DMA_OUT' iowrite##width##be(val, addr) : iowrite##width \ ^~~ drivers/dma/fsldma.h:244:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}' static void iowrite32be(u32 __iomem *addr, u32 val) ^~~~~~~~~~~ drivers/dma/fsldma.c:86:20: warning: passing argument 2 of 'iowrite32be' makes integer from pointer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32); ^ drivers/dma/fsldma.h:256:28: note: in definition of macro 'FSL_DMA_OUT' iowrite##width##be(val, addr) : iowrite##width \ ^~~~ drivers/dma/fsldma.h:244:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}' static void iowrite32be(u32 __iomem *addr, u32 val) ^~~~~~~~~~~ drivers/dma/fsldma.c:86:38: warning: passing argument 1 of 'iowrite32' makes pointer from integer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32); ^ drivers/dma/fsldma.h:257:5: note: in definition of macro 'FSL_DMA_OUT' (val, addr)) ^~~ drivers/dma/fsldma.h:234:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}' static void iowrite32(u32 __iomem *addr, u32 val) ^~~~~~~~~ drivers/dma/fsldma.c:86:20: warning: passing argument 2 of 'iowrite32' makes integer from pointer without a cast [-Wint-conversion] FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32); ^ drivers/dma/fsldma.h:257:10: note: in definition of macro 'FSL_DMA_OUT' (val, addr)) ^~~~ drivers/dma/fsldma.h:234:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}' static void iowrite32(u32 __iomem *addr, u32 val) ^~~~~~~~~ drivers/dma/fsldma.c: In function 'get_bcr': >> drivers/dma/fsldma.h:252:28: error: void value not ignored as it ought to be (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ioread##width##be(addr) : ioread##width(addr)) ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ drivers/dma/fsldma.c:91:9: note: in expansion of macro 'FSL_DMA_IN' return FSL_DMA_IN(chan, &chan->regs->bcr, 32); ^~~~~~~~~~ drivers/dma/fsldma.c: In function 'get_mr': >> drivers/dma/fsldma.c:72:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ drivers/dma/fsldma.c: In function 'get_sr': drivers/dma/fsldma.c:62:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ drivers/dma/fsldma.c: In function 'get_bcr': drivers/dma/fsldma.c:92:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ In file included from drivers/dma/fsldma.c:41:0: At top level: drivers/dma/fsldma.h:220:13: warning: 'out_le64' defined but not used [-Wunused-function] static void out_le64(u64 __iomem *addr, u64 val) ^~~~~~~~ drivers/dma/fsldma.h:214:12: warning: 'in_le64' defined but not used [-Wunused-function] static u64 in_le64(const u64 __iomem *addr) ^~~~~~~ drivers/dma/fsldma.h:207:13: warning: 'out_be64' defined but not used [-Wunused-function] static void out_be64(u64 __iomem *addr, u64 val) ^~~~~~~~ drivers/dma/fsldma.h:201:12: warning: 'in_be64' defined but not used [-Wunused-function] static u64 in_be64(const u64 __iomem *addr) ^~~~~~~ cc1: some warnings being treated as errors vim +/ioread32 +229 drivers/dma/fsldma.h 227 228 #ifdef CONFIG_PPC > 229 static void ioread32(const u32 __iomem *addr) 230 { > 231 return in_le32(addr); 232 } 233 > 234 static void iowrite32(u32 __iomem *addr, u32 val) 235 { 236 out_le32(addr, val); 237 } 238 > 239 static void ioread32be(const u32 __iomem *addr) 240 { > 241 return in_be32(addr); 242 } 243 > 244 static void iowrite32be(u32 __iomem *addr, u32 val) 245 { 246 out_be32(addr, val); 247 } 248 #endif 249 250 #define FSL_DMA_IN(fsl_dma, addr, width) \ 251 (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ? \ > 252 ioread##width##be(addr) : ioread##width(addr)) 253 254 #define FSL_DMA_OUT(fsl_dma, addr, val, width) \ 255 (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ? \ > 256 iowrite##width##be(val, addr) : iowrite##width \ > 257 (val, addr)) 258 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
T2theSwgd2lsbCBiZSBGaXggaW4gbmV4dCB2ZXJzaW9uLg0KDQpUaGFua3MgYSBsb3QuDQoNClJl Z2FyZHMsDQpXZW4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBrYnVp bGQgdGVzdCByb2JvdCBbbWFpbHRvOmxrcEBpbnRlbC5jb21dDQo+IFNlbnQ6IDIwMTfE6jEy1MIy NsjVIDI6MjANCj4gVG86IFdlbiBIZSA8d2VuLmhlXzFAbnhwLmNvbT4NCj4gQ2M6IGtidWlsZC1h bGxAMDEub3JnOyB2aW5vZC5rb3VsQGludGVsLmNvbTsgTGVvIExpIDxsZW95YW5nLmxpQG54cC5j b20+Ow0KPiBkbWFlbmdpbmVAdmdlci5rZXJuZWwub3JnOyBKaWFmZWkgUGFuIDxqaWFmZWkucGFu QG54cC5jb20+OyBKaWFoZW5nIEZhbg0KPiA8amlhaGVuZy5mYW5AbnhwLmNvbT47IFdlbiBIZSA8 d2VuLmhlXzFAbnhwLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSF0gZG1hZW5naW5lOiBmc2xk bWE6IFJlcGxhY2UgRE1BX0lOL09VVCBieQ0KPiBGU0xfRE1BX0lOL09VVA0KPiANCj4gSGkgV2Vu LA0KPiANCj4gVGhhbmsgeW91IGZvciB0aGUgcGF0Y2ghIFlldCBzb21ldGhpbmcgdG8gaW1wcm92 ZToNCj4gDQo+IFthdXRvIGJ1aWxkIHRlc3QgRVJST1Igb24gbGludXMvbWFzdGVyXQ0KPiBbYWxz byBidWlsZCB0ZXN0IEVSUk9SIG9uIHY0LjE1LXJjNSBuZXh0LTIwMTcxMjIyXSBbaWYgeW91ciBw YXRjaCBpcyBhcHBsaWVkDQo+IHRvIHRoZSB3cm9uZyBnaXQgdHJlZSwgcGxlYXNlIGRyb3AgdXMg YSBub3RlIHRvIGhlbHAgaW1wcm92ZSB0aGUgc3lzdGVtXQ0KPiANCj4gdXJsOg0KPiBodHRwczov L2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJG JTJGZ2l0aA0KPiB1Yi5jb20lMkYwZGF5LWNpJTJGbGludXglMkZjb21taXRzJTJGV2VuLUhlJTJG ZG1hZW5naW5lLWZzbGRtYS1SDQo+IGVwbGFjZS1ETUFfSU4tT1VULWJ5LUZTTF9ETUFfSU4tT1VU JTJGMjAxNzEyMjYtMDAwNzE4JmRhdGE9MDINCj4gJTdDMDElN0N3ZW4uaGVfMSU0MG54cC5jb20l N0NhY2I5ZWNmZTAwM2Q0MzMzMjk3ZTA4ZDU0YmM0NDU0Mw0KPiAlN0M2ODZlYTFkM2JjMmI0YzZm YTkyY2Q5OWM1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NDk4MjI4NzU1NTU1DQo+IDA2NyZzZGF0YT1T ajRIbUZyd0hxejFudjVCUURoNWl4dkJwcDNibnNOV2M3UTFVOFVOeUNFJTNEJnJlcw0KPiBlcnZl ZD0wDQo+IGNvbmZpZzogcG93ZXJwYy1nZV9pbXAzYV9kZWZjb25maWcgKGF0dGFjaGVkIGFzIC5j b25maWcpDQo+IGNvbXBpbGVyOiBwb3dlcnBjLWxpbnV4LWdudS1nY2MgKERlYmlhbiA3LjIuMC0x MSkgNy4yLjANCj4gcmVwcm9kdWNlOg0KPiAgICAgICAgIHdnZXQNCj4gaHR0cHM6Ly9lbWVhMDEu c2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRnJhdy4N Cj4gZ2l0aHVidXNlcmNvbnRlbnQuY29tJTJGaW50ZWwlMkZsa3AtdGVzdHMlMkZtYXN0ZXIlMkZz YmluJTJGbWFrZS5jcm8NCj4gc3MmZGF0YT0wMiU3QzAxJTdDd2VuLmhlXzElNDBueHAuY29tJTdD YWNiOWVjZmUwMDNkNDMzMzI5N2UwOA0KPiBkNTRiYzQ0NTQzJTdDNjg2ZWExZDNiYzJiNGM2ZmE5 MmNkOTljNWMzMDE2MzUlN0MwJTdDMCU3QzYzNjQ5DQo+IDgyMjg3NTU1NTUwNjcmc2RhdGE9ZDhx dUxqdTdETlZ0SmtOR3I0d29kQjVXZUtlT2dwNVlkZVRqTDk5aUtscw0KPiAlM0QmcmVzZXJ2ZWQ9 MCAtTyB+L2Jpbi9tYWtlLmNyb3NzDQo+ICAgICAgICAgY2htb2QgK3ggfi9iaW4vbWFrZS5jcm9z cw0KPiAgICAgICAgICMgc2F2ZSB0aGUgYXR0YWNoZWQgLmNvbmZpZyB0byBsaW51eCBidWlsZCB0 cmVlDQo+ICAgICAgICAgbWFrZS5jcm9zcyBBUkNIPXBvd2VycGMNCj4gDQo+IEFsbCBlcnJvci93 YXJuaW5ncyAobmV3IG9uZXMgcHJlZml4ZWQgYnkgPj4pOg0KPiANCj4gICAgSW4gZmlsZSBpbmNs dWRlZCBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjQxOjA6DQo+ID4+IGRyaXZlcnMvZG1hL2Zz bGRtYS5oOjIyOToxMzogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAnaW9yZWFkMzInDQo+ ICAgICBzdGF0aWMgdm9pZCBpb3JlYWQzMihjb25zdCB1MzIgX19pb21lbSAqYWRkcikNCj4gICAg ICAgICAgICAgICAgIF5+fn5+fn5+DQo+ICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bv d2VycGMvaW5jbHVkZS9hc20vaW8uaDozNjowLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20g aW5jbHVkZS9saW51eC9pby5oOjI1LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVk ZS9saW51eC9pcnEuaDoyNSwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJw Yy9pbmNsdWRlL2FzbS9oYXJkaXJxLmg6NiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGlu Y2x1ZGUvbGludXgvaGFyZGlycS5oOjksDQo+ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNs dWRlL2xpbnV4L2ludGVycnVwdC5oOjEzLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5j bHVkZS9saW51eC9wY2kuaDozMiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMv ZG1hL2ZzbGRtYS5jOjI5Og0KPiAgICBpbmNsdWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6MzI6MjE6 IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mDQo+ICdpb3JlYWQzMicgd2FzIGhlcmUNCj4g ICAgIGV4dGVybiB1bnNpZ25lZCBpbnQgaW9yZWFkMzIodm9pZCBfX2lvbWVtICopOw0KPiAgICAg ICAgICAgICAgICAgICAgICAgICBefn5+fn5+fg0KPiAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20g ZHJpdmVycy9kbWEvZnNsZG1hLmM6NDE6MDoNCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6IElu IGZ1bmN0aW9uICdpb3JlYWQzMic6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzMTo5OiB3 YXJuaW5nOiAncmV0dXJuJyB3aXRoIGEgdmFsdWUsIGluDQo+ID4+IGZ1bmN0aW9uIHJldHVybmlu ZyB2b2lkDQo+ICAgICAgcmV0dXJuIGluX2xlMzIoYWRkcik7DQo+ICAgICAgICAgICAgIF5+fn5+ fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjI5OjEzOiBub3RlOiBkZWNsYXJl ZCBoZXJlDQo+ICAgICBzdGF0aWMgdm9pZCBpb3JlYWQzMihjb25zdCB1MzIgX19pb21lbSAqYWRk cikNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5o OiBBdCB0b3AgbGV2ZWw6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzNDoxMzogZXJyb3I6 IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAnaW93cml0ZTMyJw0KPiAgICAgc3RhdGljIHZvaWQgaW93 cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+ fn5+fn5+DQo+ICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9h c20vaW8uaDozNjowLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9p by5oOjI1LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pcnEuaDoy NSwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9o YXJkaXJxLmg6NiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGluY2x1ZGUvbGludXgvaGFy ZGlycS5oOjksDQo+ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNsdWRlL2xpbnV4L2ludGVy cnVwdC5oOjEzLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9wY2ku aDozMiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjI5 Og0KPiAgICBpbmNsdWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6NDI6MTM6IG5vdGU6IHByZXZpb3Vz IGRlY2xhcmF0aW9uIG9mDQo+ICdpb3dyaXRlMzInIHdhcyBoZXJlDQo+ICAgICBleHRlcm4gdm9p ZCBpb3dyaXRlMzIodTMyLCB2b2lkIF9faW9tZW0gKik7DQo+ICAgICAgICAgICAgICAgICBefn5+ fn5+fn4NCj4gICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjQx OjA6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzOToxMzogZXJyb3I6IGNvbmZsaWN0aW5n IHR5cGVzIGZvciAnaW9yZWFkMzJiZScNCj4gICAgIHN0YXRpYyB2b2lkIGlvcmVhZDMyYmUoY29u c3QgdTMyIF9faW9tZW0gKmFkZHIpDQo+ICAgICAgICAgICAgICAgICBefn5+fn5+fn5+DQo+ICAg IEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaDozNjow LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pby5oOjI1LA0KPiAg ICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pcnEuaDoyNSwNCj4gICAgICAg ICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmg6NiwN Cj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGluY2x1ZGUvbGludXgvaGFyZGlycS5oOjksDQo+ ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjEzLA0K PiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9wY2kuaDozMiwNCj4gICAg ICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjI5Og0KPiAgICBpbmNs dWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6MzM6MjE6IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9u IG9mDQo+ICdpb3JlYWQzMmJlJyB3YXMgaGVyZQ0KPiAgICAgZXh0ZXJuIHVuc2lnbmVkIGludCBp b3JlYWQzMmJlKHZvaWQgX19pb21lbSAqKTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgXn5+ fn5+fn5+fg0KPiAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gZHJpdmVycy9kbWEvZnNsZG1hLmM6 NDE6MDoNCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6IEluIGZ1bmN0aW9uICdpb3JlYWQzMmJl JzoNCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjQxOjk6IHdhcm5pbmc6ICdyZXR1cm4nIHdp dGggYSB2YWx1ZSwgaW4gZnVuY3Rpb24NCj4gcmV0dXJuaW5nIHZvaWQNCj4gICAgICByZXR1cm4g aW5fYmUzMihhZGRyKTsNCj4gICAgICAgICAgICAgXn5+fn5+fn5+fn5+fg0KPiAgICBkcml2ZXJz L2RtYS9mc2xkbWEuaDoyMzk6MTM6IG5vdGU6IGRlY2xhcmVkIGhlcmUNCj4gICAgIHN0YXRpYyB2 b2lkIGlvcmVhZDMyYmUoY29uc3QgdTMyIF9faW9tZW0gKmFkZHIpDQo+ICAgICAgICAgICAgICAg ICBefn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOiBBdCB0b3AgbGV2ZWw6DQo+ ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI0NDoxMzogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVz IGZvciAnaW93cml0ZTMyYmUnDQo+ICAgICBzdGF0aWMgdm9pZCBpb3dyaXRlMzJiZSh1MzIgX19p b21lbSAqYWRkciwgdTMyIHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+ICAg IEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaDozNjow LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pby5oOjI1LA0KPiAg ICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pcnEuaDoyNSwNCj4gICAgICAg ICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmg6NiwN Cj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGluY2x1ZGUvbGludXgvaGFyZGlycS5oOjksDQo+ ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjEzLA0K PiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9wY2kuaDozMiwNCj4gICAg ICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjI5Og0KPiAgICBpbmNs dWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6NDM6MTM6IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9u IG9mDQo+ICdpb3dyaXRlMzJiZScgd2FzIGhlcmUNCj4gICAgIGV4dGVybiB2b2lkIGlvd3JpdGUz MmJlKHUzMiwgdm9pZCBfX2lvbWVtICopOw0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4N Cj4gICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjQxOjA6DQo+ ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOiBJbiBmdW5jdGlvbiAnc2V0X3NyJzoNCj4gPj4gZHJp dmVycy9kbWEvZnNsZG1hLmM6NTY6Mzc6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMSBvZg0K PiA+PiAnaW93cml0ZTMyYmUnIG1ha2VzIHBvaW50ZXIgZnJvbSBpbnRlZ2VyIHdpdGhvdXQgYSBj YXN0DQo+ID4+IFstV2ludC1jb252ZXJzaW9uXQ0KPiAgICAgIEZTTF9ETUFfT1VUKGNoYW4sICZj aGFuLT5yZWdzLT5zciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI1NjoyMzogbm90ZTogaW4g ZGVmaW5pdGlvbiBvZiBtYWNybw0KPiAnRlNMX0RNQV9PVVQnDQo+ICAgICAgICBpb3dyaXRlIyN3 aWR0aCMjYmUodmFsLCBhZGRyKSA6IGlvd3JpdGUjI3dpZHRoIFwNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICBefn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjQ0OjEzOiBub3RlOiBl eHBlY3RlZCAndTMyICoge2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+IGJ1dCBhcmd1bWVudCBpcyBv ZiB0eXBlICd1MzIge2FrYSB1bnNpZ25lZCBpbnR9Jw0KPiAgICAgc3RhdGljIHZvaWQgaW93cml0 ZTMyYmUodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAgICAgICAgICAgICAgICBefn5+ fn5+fn5+fg0KPiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuYzo1NjoyMDogd2FybmluZzogcGFzc2lu ZyBhcmd1bWVudCAyIG9mDQo+ID4+ICdpb3dyaXRlMzJiZScgbWFrZXMgaW50ZWdlciBmcm9tIHBv aW50ZXIgd2l0aG91dCBhIGNhc3QNCj4gPj4gWy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNM X0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPnNyLCB2YWwsIDMyKTsNCj4gICAgICAgICAgICAg ICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI1NjoyODogbm90ZTogaW4g ZGVmaW5pdGlvbiBvZiBtYWNybw0KPiAnRlNMX0RNQV9PVVQnDQo+ICAgICAgICBpb3dyaXRlIyN3 aWR0aCMjYmUodmFsLCBhZGRyKSA6IGlvd3JpdGUjI3dpZHRoIFwNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjQ0OjEzOiBu b3RlOiBleHBlY3RlZCAndTMyIHtha2EgdW5zaWduZWQgaW50fScgYnV0DQo+IGFyZ3VtZW50IGlz IG9mIHR5cGUgJ3UzMiAqIHtha2EgdW5zaWduZWQgaW50ICp9Jw0KPiAgICAgc3RhdGljIHZvaWQg aW93cml0ZTMyYmUodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAgICAgICAgICAgICAg ICBefn5+fn5+fn5+fg0KPiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuYzo1NjozNzogd2FybmluZzog cGFzc2luZyBhcmd1bWVudCAxIG9mDQo+ID4+ICdpb3dyaXRlMzInIG1ha2VzIHBvaW50ZXIgZnJv bSBpbnRlZ2VyIHdpdGhvdXQgYSBjYXN0DQo+ID4+IFstV2ludC1jb252ZXJzaW9uXQ0KPiAgICAg IEZTTF9ETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5zciwgdmFsLCAzMik7DQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRt YS5oOjI1Nzo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1hY3JvICdGU0xfRE1BX09VVCcNCj4g ICAgICAgICh2YWwsIGFkZHIpKQ0KPiAgICAgICAgIF5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xk bWEuaDoyMzQ6MTM6IG5vdGU6IGV4cGVjdGVkICd1MzIgKiB7YWthIHVuc2lnbmVkIGludCAqfScN Cj4gYnV0IGFyZ3VtZW50IGlzIG9mIHR5cGUgJ3UzMiB7YWthIHVuc2lnbmVkIGludH0nDQo+ICAg ICBzdGF0aWMgdm9pZCBpb3dyaXRlMzIodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAg ICAgICAgICAgICAgICBefn5+fn5+fn4NCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmM6NTY6MjA6 IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMiBvZg0KPiA+PiAnaW93cml0ZTMyJyBtYWtlcyBp bnRlZ2VyIGZyb20gcG9pbnRlciB3aXRob3V0IGEgY2FzdA0KPiA+PiBbLVdpbnQtY29udmVyc2lv bl0NCj4gICAgICBGU0xfRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+c3IsIHZhbCwgMzIpOw0K PiAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjU3 OjEwOiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1hY3JvDQo+ICdGU0xfRE1BX09VVCcNCj4gICAg ICAgICh2YWwsIGFkZHIpKQ0KPiAgICAgICAgICAgICAgXn5+fg0KPiAgICBkcml2ZXJzL2RtYS9m c2xkbWEuaDoyMzQ6MTM6IG5vdGU6IGV4cGVjdGVkICd1MzIge2FrYSB1bnNpZ25lZCBpbnR9JyBi dXQNCj4gYXJndW1lbnQgaXMgb2YgdHlwZSAndTMyICoge2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+ ICAgICBzdGF0aWMgdm9pZCBpb3dyaXRlMzIodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ ICAgICAgICAgICAgICAgICBefn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmM6IElu IGZ1bmN0aW9uICdnZXRfc3InOg0KPiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTI6Mjg6IGVy cm9yOiB2b2lkIHZhbHVlIG5vdCBpZ25vcmVkIGFzIGl0DQo+ID4+IG91Z2h0IHRvIGJlDQo+ICAg ICAgICgoKGZzbF9kbWEpLT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/ICBcDQo+ICAg ICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICAg ICAgICBpb3JlYWQjI3dpZHRoIyNiZShhZGRyKSA6IGlvcmVhZCMjd2lkdGgoYWRkcikpDQo+ICAg ICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5efn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ID4+ IGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjYxOjk6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAn RlNMX0RNQV9JTicNCj4gICAgICByZXR1cm4gRlNMX0RNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+ c3IsIDMyKTsNCj4gICAgICAgICAgICAgXn5+fn5+fn5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xk bWEuYzogSW4gZnVuY3Rpb24gJ3NldF9tcic6DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjY2 OjM3OiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3VtZW50IDEgb2YNCj4gJ2lvd3JpdGUzMmJlJyBtYWtl cyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEgY2FzdCBbLVdpbnQtY29udmVyc2lvbl0N Cj4gICAgICBGU0xfRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIHZhbCwgMzIpOw0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAgICBkcml2ZXJzL2Rt YS9mc2xkbWEuaDoyNTY6MjM6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8NCj4gJ0ZTTF9E TUFfT1VUJw0KPiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2JlKHZhbCwgYWRkcikgOiBpb3dyaXRl IyN3aWR0aCBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+DQo+ICAgIGRyaXZlcnMv ZG1hL2ZzbGRtYS5oOjI0NDoxMzogbm90ZTogZXhwZWN0ZWQgJ3UzMiAqIHtha2EgdW5zaWduZWQg aW50ICp9Jw0KPiBidXQgYXJndW1lbnQgaXMgb2YgdHlwZSAndTMyIHtha2EgdW5zaWduZWQgaW50 fScNCj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUzMiBfX2lvbWVtICphZGRyLCB1MzIg dmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNs ZG1hLmM6NjY6MjA6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMiBvZg0KPiAnaW93cml0ZTMy YmUnIG1ha2VzIGludGVnZXIgZnJvbSBwb2ludGVyIHdpdGhvdXQgYSBjYXN0IFstV2ludC1jb252 ZXJzaW9uXQ0KPiAgICAgIEZTTF9ETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgdmFsLCAz Mik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEu aDoyNTY6Mjg6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8NCj4gJ0ZTTF9ETUFfT1VUJw0K PiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2JlKHZhbCwgYWRkcikgOiBpb3dyaXRlIyN3aWR0aCBc DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+DQo+ICAgIGRyaXZlcnMvZG1h L2ZzbGRtYS5oOjI0NDoxMzogbm90ZTogZXhwZWN0ZWQgJ3UzMiB7YWthIHVuc2lnbmVkIGludH0n IGJ1dA0KPiBhcmd1bWVudCBpcyBvZiB0eXBlICd1MzIgKiB7YWthIHVuc2lnbmVkIGludCAqfScN Cj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFs KQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1h LmM6NjY6Mzc6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMSBvZiAnaW93cml0ZTMyJw0KPiBt YWtlcyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEgY2FzdCBbLVdpbnQtY29udmVyc2lv bl0NCj4gICAgICBGU0xfRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIHZhbCwgMzIpOw0K PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAgICBkcml2ZXJz L2RtYS9mc2xkbWEuaDoyNTc6NTogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyAnRlNMX0RN QV9PVVQnDQo+ICAgICAgICAodmFsLCBhZGRyKSkNCj4gICAgICAgICBefn4NCj4gICAgZHJpdmVy cy9kbWEvZnNsZG1hLmg6MjM0OjEzOiBub3RlOiBleHBlY3RlZCAndTMyICoge2FrYSB1bnNpZ25l ZCBpbnQgKn0nDQo+IGJ1dCBhcmd1bWVudCBpcyBvZiB0eXBlICd1MzIge2FrYSB1bnNpZ25lZCBp bnR9Jw0KPiAgICAgc3RhdGljIHZvaWQgaW93cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIg dmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRt YS5jOjY2OjIwOiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3VtZW50IDIgb2YgJ2lvd3JpdGUzMicNCj4g bWFrZXMgaW50ZWdlciBmcm9tIHBvaW50ZXIgd2l0aG91dCBhIGNhc3QgWy1XaW50LWNvbnZlcnNp b25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCB2YWwsIDMyKTsN Cj4gICAgICAgICAgICAgICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI1 NzoxMDogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybw0KPiAnRlNMX0RNQV9PVVQnDQo+ICAg ICAgICAodmFsLCBhZGRyKSkNCj4gICAgICAgICAgICAgIF5+fn4NCj4gICAgZHJpdmVycy9kbWEv ZnNsZG1hLmg6MjM0OjEzOiBub3RlOiBleHBlY3RlZCAndTMyIHtha2EgdW5zaWduZWQgaW50fScg YnV0DQo+IGFyZ3VtZW50IGlzIG9mIHR5cGUgJ3UzMiAqIHtha2EgdW5zaWduZWQgaW50ICp9Jw0K PiAgICAgc3RhdGljIHZvaWQgaW93cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0K PiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOiBJ biBmdW5jdGlvbiAnZ2V0X21yJzoNCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmg6MjUyOjI4OiBl cnJvcjogdm9pZCB2YWx1ZSBub3QgaWdub3JlZCBhcyBpdA0KPiA+PiBvdWdodCB0byBiZQ0KPiAg ICAgICAoKChmc2xfZG1hKS0+ZmVhdHVyZSAmIEZTTF9ETUFfQklHX0VORElBTikgPyAgXA0KPiAg ICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAg ICAgICAgaW9yZWFkIyN3aWR0aCMjYmUoYWRkcikgOiBpb3JlYWQjI3dpZHRoKGFkZHIpKQ0KPiAg ICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Xn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAg ICBkcml2ZXJzL2RtYS9mc2xkbWEuYzo3MTo5OiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8g J0ZTTF9ETUFfSU4nDQo+ICAgICAgcmV0dXJuIEZTTF9ETUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3Mt Pm1yLCAzMik7DQo+ICAgICAgICAgICAgIF5+fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNs ZG1hLmM6IEluIGZ1bmN0aW9uICdzZXRfY2Rhcic6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5o OjI1Njo0OiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24NCj4gPj4gJ2lv d3JpdGU2NGJlJzsgZGlkIHlvdSBtZWFuICdpb3dyaXRlMzJiZSc/DQo+ID4+IFstV2Vycm9yPWlt cGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQ0KPiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2Jl KHZhbCwgYWRkcikgOiBpb3dyaXRlIyN3aWR0aCBcDQo+ICAgICAgICBeDQo+ID4+IGRyaXZlcnMv ZG1hL2ZzbGRtYS5jOjc2OjI6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnRlNMX0RNQV9P VVQnDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPmNkYXIsIGFkZHIgfCBG U0xfRE1BX1NORU4sIDY0KTsNCj4gICAgICBefn5+fn5+fn5+fg0KPiA+PiBkcml2ZXJzL2RtYS9m c2xkbWEuaDoyNTY6MzY6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbg0K PiA+PiAnaW93cml0ZTY0JzsgZGlkIHlvdSBtZWFuICdpb3dyaXRlMzInPw0KPiA+PiBbLVdlcnJv cj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0NCj4gICAgICAgIGlvd3JpdGUjI3dpZHRo IyNiZSh2YWwsIGFkZHIpIDogaW93cml0ZSMjd2lkdGggXA0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeDQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjc2OjI6IG5v dGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnRlNMX0RNQV9PVVQnDQo+ICAgICAgRlNMX0RNQV9P VVQoY2hhbiwgJmNoYW4tPnJlZ3MtPmNkYXIsIGFkZHIgfCBGU0xfRE1BX1NORU4sIDY0KTsNCj4g ICAgICBefn5+fn5+fn5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24g J2dldF9jZGFyJzoNCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmg6MjUyOjQ6IGVycm9yOiBpbXBs aWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbg0KPiA+PiAnaW9yZWFkNjRiZSc7IGRpZCB5b3Ug bWVhbiAnaW9yZWFkMzJiZSc/DQo+ID4+IFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xh cmF0aW9uXQ0KPiAgICAgICAgaW9yZWFkIyN3aWR0aCMjYmUoYWRkcikgOiBpb3JlYWQjI3dpZHRo KGFkZHIpKQ0KPiAgICAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuYzo4MTo5OiBub3Rl OiBpbiBleHBhbnNpb24gb2YgbWFjcm8gJ0ZTTF9ETUFfSU4nDQo+ICAgICAgcmV0dXJuIEZTTF9E TUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3MtPmNkYXIsIDY0KSAmIH5GU0xfRE1BX1NORU47DQo+ICAg ICAgICAgICAgIF5+fn5+fn5+fn4NCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmg6MjUyOjMwOiBl cnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24NCj4gPj4gJ2lvcmVhZDY0Jzsg ZGlkIHlvdSBtZWFuICdpb3JlYWQzMic/DQo+ID4+IFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9u LWRlY2xhcmF0aW9uXQ0KPiAgICAgICAgaW9yZWFkIyN3aWR0aCMjYmUoYWRkcikgOiBpb3JlYWQj I3dpZHRoKGFkZHIpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeDQo+ICAg IGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjgxOjk6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAn RlNMX0RNQV9JTicNCj4gICAgICByZXR1cm4gRlNMX0RNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+ Y2RhciwgNjQpICYgfkZTTF9ETUFfU05FTjsNCj4gICAgICAgICAgICAgXn5+fn5+fn5+fg0KPiAg ICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24gJ3NldF9iY3InOg0KPiAgICBkcml2 ZXJzL2RtYS9mc2xkbWEuYzo4NjozODogd2FybmluZzogcGFzc2luZyBhcmd1bWVudCAxIG9mDQo+ ICdpb3dyaXRlMzJiZScgbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBhIGNhc3Qg Wy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3Mt PmJjciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTY6MjM6IG5vdGU6IGluIGRlZmluaXRp b24gb2YgbWFjcm8NCj4gJ0ZTTF9ETUFfT1VUJw0KPiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2Jl KHZhbCwgYWRkcikgOiBpb3dyaXRlIyN3aWR0aCBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgXn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI0NDoxMzogbm90ZTogZXhwZWN0ZWQg J3UzMiAqIHtha2EgdW5zaWduZWQgaW50ICp9Jw0KPiBidXQgYXJndW1lbnQgaXMgb2YgdHlwZSAn dTMyIHtha2EgdW5zaWduZWQgaW50fScNCj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUz MiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4N Cj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmM6ODY6MjA6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1l bnQgMiBvZg0KPiAnaW93cml0ZTMyYmUnIG1ha2VzIGludGVnZXIgZnJvbSBwb2ludGVyIHdpdGhv dXQgYSBjYXN0IFstV2ludC1jb252ZXJzaW9uXQ0KPiAgICAgIEZTTF9ETUFfT1VUKGNoYW4sICZj aGFuLT5yZWdzLT5iY3IsIHZhbCwgMzIpOw0KPiAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4g ICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjU2OjI4OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1h Y3JvDQo+ICdGU0xfRE1BX09VVCcNCj4gICAgICAgIGlvd3JpdGUjI3dpZHRoIyNiZSh2YWwsIGFk ZHIpIDogaW93cml0ZSMjd2lkdGggXA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Xn5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNDQ6MTM6IG5vdGU6IGV4cGVjdGVkICd1 MzIge2FrYSB1bnNpZ25lZCBpbnR9JyBidXQNCj4gYXJndW1lbnQgaXMgb2YgdHlwZSAndTMyICog e2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+ICAgICBzdGF0aWMgdm9pZCBpb3dyaXRlMzJiZSh1MzIg X19pb21lbSAqYWRkciwgdTMyIHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+ ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjg2OjM4OiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3VtZW50 IDEgb2YgJ2lvd3JpdGUzMicNCj4gbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBh IGNhc3QgWy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4t PnJlZ3MtPmJjciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTc6NTogbm90ZTogaW4gZGVm aW5pdGlvbiBvZiBtYWNybyAnRlNMX0RNQV9PVVQnDQo+ICAgICAgICAodmFsLCBhZGRyKSkNCj4g ICAgICAgICBefn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjM0OjEzOiBub3RlOiBleHBl Y3RlZCAndTMyICoge2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+IGJ1dCBhcmd1bWVudCBpcyBvZiB0 eXBlICd1MzIge2FrYSB1bnNpZ25lZCBpbnR9Jw0KPiAgICAgc3RhdGljIHZvaWQgaW93cml0ZTMy KHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+ DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjg2OjIwOiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3Vt ZW50IDIgb2YgJ2lvd3JpdGUzMicNCj4gbWFrZXMgaW50ZWdlciBmcm9tIHBvaW50ZXIgd2l0aG91 dCBhIGNhc3QgWy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNo YW4tPnJlZ3MtPmJjciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAg ICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTc6MTA6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFj cm8NCj4gJ0ZTTF9ETUFfT1VUJw0KPiAgICAgICAgKHZhbCwgYWRkcikpDQo+ICAgICAgICAgICAg ICBefn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzNDoxMzogbm90ZTogZXhwZWN0ZWQg J3UzMiB7YWthIHVuc2lnbmVkIGludH0nIGJ1dA0KPiBhcmd1bWVudCBpcyBvZiB0eXBlICd1MzIg KiB7YWthIHVuc2lnbmVkIGludCAqfScNCj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMih1MzIg X19pb21lbSAqYWRkciwgdTMyIHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+fg0KPiAg ICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24gJ2dldF9iY3InOg0KPiA+PiBkcml2 ZXJzL2RtYS9mc2xkbWEuaDoyNTI6Mjg6IGVycm9yOiB2b2lkIHZhbHVlIG5vdCBpZ25vcmVkIGFz IGl0DQo+ID4+IG91Z2h0IHRvIGJlDQo+ICAgICAgICgoKGZzbF9kbWEpLT5mZWF0dXJlICYgRlNM X0RNQV9CSUdfRU5ESUFOKSA/ICBcDQo+ICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICAgICAgICBpb3JlYWQjI3dpZHRoIyNiZShhZGRyKSA6 IGlvcmVhZCMjd2lkdGgoYWRkcikpDQo+ICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5e fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjkxOjk6IG5v dGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnRlNMX0RNQV9JTicNCj4gICAgICByZXR1cm4gRlNM X0RNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+YmNyLCAzMik7DQo+ICAgICAgICAgICAgIF5+fn5+ fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmM6IEluIGZ1bmN0aW9uICdnZXRfbXInOg0K PiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuYzo3MjoxOiB3YXJuaW5nOiBjb250cm9sIHJlYWNoZXMg ZW5kIG9mIG5vbi12b2lkDQo+ID4+IGZ1bmN0aW9uIFstV3JldHVybi10eXBlXQ0KPiAgICAgfQ0K PiAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24gJ2dldF9zcic6 DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjYyOjE6IHdhcm5pbmc6IGNvbnRyb2wgcmVhY2hl cyBlbmQgb2Ygbm9uLXZvaWQNCj4gZnVuY3Rpb24gWy1XcmV0dXJuLXR5cGVdDQo+ICAgICB9DQo+ ICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOiBJbiBmdW5jdGlvbiAnZ2V0X2Jjcic6 DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjkyOjE6IHdhcm5pbmc6IGNvbnRyb2wgcmVhY2hl cyBlbmQgb2Ygbm9uLXZvaWQNCj4gZnVuY3Rpb24gWy1XcmV0dXJuLXR5cGVdDQo+ICAgICB9DQo+ ICAgICBeDQo+ICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBkcml2ZXJzL2RtYS9mc2xkbWEuYzo0 MTowOg0KPiAgICBBdCB0b3AgbGV2ZWw6DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIyMDox Mzogd2FybmluZzogJ291dF9sZTY0JyBkZWZpbmVkIGJ1dCBub3QgdXNlZA0KPiBbLVd1bnVzZWQt ZnVuY3Rpb25dDQo+ICAgICBzdGF0aWMgdm9pZCBvdXRfbGU2NCh1NjQgX19pb21lbSAqYWRkciwg dTY0IHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2Zz bGRtYS5oOjIxNDoxMjogd2FybmluZzogJ2luX2xlNjQnIGRlZmluZWQgYnV0IG5vdCB1c2VkDQo+ IFstV3VudXNlZC1mdW5jdGlvbl0NCj4gICAgIHN0YXRpYyB1NjQgaW5fbGU2NChjb25zdCB1NjQg X19pb21lbSAqYWRkcikNCj4gICAgICAgICAgICAgICAgXn5+fn5+fg0KPiAgICBkcml2ZXJzL2Rt YS9mc2xkbWEuaDoyMDc6MTM6IHdhcm5pbmc6ICdvdXRfYmU2NCcgZGVmaW5lZCBidXQgbm90IHVz ZWQNCj4gWy1XdW51c2VkLWZ1bmN0aW9uXQ0KPiAgICAgc3RhdGljIHZvaWQgb3V0X2JlNjQodTY0 IF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpDQo+ICAgICAgICAgICAgICAgICBefn5+fn5+fg0KPiAg ICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyMDE6MTI6IHdhcm5pbmc6ICdpbl9iZTY0JyBkZWZpbmVk IGJ1dCBub3QgdXNlZA0KPiBbLVd1bnVzZWQtZnVuY3Rpb25dDQo+ICAgICBzdGF0aWMgdTY0IGlu X2JlNjQoY29uc3QgdTY0IF9faW9tZW0gKmFkZHIpDQo+ICAgICAgICAgICAgICAgIF5+fn5+fn4N Cj4gICAgY2MxOiBzb21lIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzDQo+IA0KPiB2 aW0gKy9pb3JlYWQzMiArMjI5IGRyaXZlcnMvZG1hL2ZzbGRtYS5oDQo+IA0KPiAgICAyMjcNCj4g ICAgMjI4CSNpZmRlZiBDT05GSUdfUFBDDQo+ICA+IDIyOQlzdGF0aWMgdm9pZCBpb3JlYWQzMihj b25zdCB1MzIgX19pb21lbSAqYWRkcikNCj4gICAgMjMwCXsNCj4gID4gMjMxCQlyZXR1cm4gaW5f bGUzMihhZGRyKTsNCj4gICAgMjMyCX0NCj4gICAgMjMzDQo+ICA+IDIzNAlzdGF0aWMgdm9pZCBp b3dyaXRlMzIodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAgIDIzNQl7DQo+ICAgIDIz NgkJb3V0X2xlMzIoYWRkciwgdmFsKTsNCj4gICAgMjM3CX0NCj4gICAgMjM4DQo+ICA+IDIzOQlz dGF0aWMgdm9pZCBpb3JlYWQzMmJlKGNvbnN0IHUzMiBfX2lvbWVtICphZGRyKQ0KPiAgICAyNDAJ ew0KPiAgPiAyNDEJCXJldHVybiBpbl9iZTMyKGFkZHIpOw0KPiAgICAyNDIJfQ0KPiAgICAyNDMN Cj4gID4gMjQ0CXN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUzMiBfX2lvbWVtICphZGRyLCB1MzIg dmFsKQ0KPiAgICAyNDUJew0KPiAgICAyNDYJCW91dF9iZTMyKGFkZHIsIHZhbCk7DQo+ICAgIDI0 Nwl9DQo+ICAgIDI0OAkjZW5kaWYNCj4gICAgMjQ5DQo+ICAgIDI1MAkjZGVmaW5lIEZTTF9ETUFf SU4oZnNsX2RtYSwgYWRkciwgd2lkdGgpCQkJCVwNCj4gICAgMjUxCQkJKCgoZnNsX2RtYSktPmZl YXR1cmUgJiBGU0xfRE1BX0JJR19FTkRJQU4pID8NCj4gCVwNCj4gID4gMjUyCQkJCWlvcmVhZCMj d2lkdGgjI2JlKGFkZHIpIDogaW9yZWFkIyN3aWR0aChhZGRyKSkNCj4gICAgMjUzDQo+ICAgIDI1 NAkjZGVmaW5lIEZTTF9ETUFfT1VUKGZzbF9kbWEsIGFkZHIsIHZhbCwgd2lkdGgpDQo+IAlcDQo+ ICAgIDI1NQkJCSgoKGZzbF9kbWEpLT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/DQo+ IAlcDQo+ICA+IDI1NgkJCQlpb3dyaXRlIyN3aWR0aCMjYmUodmFsLCBhZGRyKSA6IGlvd3JpdGUj I3dpZHRoCVwNCj4gID4gMjU3CQkJICh2YWwsIGFkZHIpKQ0KPiAgICAyNTgNCj4gDQo+IC0tLQ0K PiAwLURBWSBrZXJuZWwgdGVzdCBpbmZyYXN0cnVjdHVyZSAgICAgICAgICAgICAgICBPcGVuIFNv dXJjZSBUZWNobm9sb2d5DQo+IENlbnRlcg0KPiBodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJv dGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGbGlzdHMuDQo+IDAxLm9yZyUy RnBpcGVybWFpbCUyRmtidWlsZC1hbGwmZGF0YT0wMiU3QzAxJTdDd2VuLmhlXzElNDBueHAuY29t DQo+ICU3Q2FjYjllY2ZlMDAzZDQzMzMyOTdlMDhkNTRiYzQ0NTQzJTdDNjg2ZWExZDNiYzJiNGM2 ZmE5MmNkOTljDQo+IDVjMzAxNjM1JTdDMCU3QzAlN0M2MzY0OTgyMjg3NTU1NTUwNjcmc2RhdGE9 Rlo4Wk00OGlyN0NrMTgyam0NCj4gVjQ4bjVmeW5kSVJFa25hekYzREk2bmNFeTAlM0QmcmVzZXJ2 ZWQ9MCAgICAgICAgICAgICAgICAgICBJbnRlbA0KPiBDb3Jwb3JhdGlvbg0K -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c index 3eaece8..75479d6 100644 --- a/drivers/dma/fsldma.c +++ b/drivers/dma/fsldma.c @@ -53,42 +53,42 @@ static void set_sr(struct fsldma_chan *chan, u32 val) { - DMA_OUT(chan, &chan->regs->sr, val, 32); + FSL_DMA_OUT(chan, &chan->regs->sr, val, 32); } static u32 get_sr(struct fsldma_chan *chan) { - return DMA_IN(chan, &chan->regs->sr, 32); + return FSL_DMA_IN(chan, &chan->regs->sr, 32); } static void set_mr(struct fsldma_chan *chan, u32 val) { - DMA_OUT(chan, &chan->regs->mr, val, 32); + FSL_DMA_OUT(chan, &chan->regs->mr, val, 32); } static u32 get_mr(struct fsldma_chan *chan) { - return DMA_IN(chan, &chan->regs->mr, 32); + return FSL_DMA_IN(chan, &chan->regs->mr, 32); } static void set_cdar(struct fsldma_chan *chan, dma_addr_t addr) { - DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64); + FSL_DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64); } static dma_addr_t get_cdar(struct fsldma_chan *chan) { - return DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN; + return FSL_DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN; } static void set_bcr(struct fsldma_chan *chan, u32 val) { - DMA_OUT(chan, &chan->regs->bcr, val, 32); + FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32); } static u32 get_bcr(struct fsldma_chan *chan) { - return DMA_IN(chan, &chan->regs->bcr, 32); + return FSL_DMA_IN(chan, &chan->regs->bcr, 32); } /* diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h index 4787d48..94c0773 100644 --- a/drivers/dma/fsldma.h +++ b/drivers/dma/fsldma.h @@ -196,6 +196,7 @@ struct fsldma_chan { #define to_fsl_desc(lh) container_of(lh, struct fsl_desc_sw, node) #define tx_to_fsl_desc(tx) container_of(tx, struct fsl_desc_sw, async_tx) +#ifdef CONFIG_PPC #ifndef __powerpc64__ static u64 in_be64(const u64 __iomem *addr) { @@ -222,13 +223,38 @@ static void out_le64(u64 __iomem *addr, u64 val) out_le32((u32 __iomem *)addr, (u32)val); } #endif +#endif -#define DMA_IN(fsl_chan, addr, width) \ - (((fsl_chan)->feature & FSL_DMA_BIG_ENDIAN) ? \ - in_be##width(addr) : in_le##width(addr)) -#define DMA_OUT(fsl_chan, addr, val, width) \ - (((fsl_chan)->feature & FSL_DMA_BIG_ENDIAN) ? \ - out_be##width(addr, val) : out_le##width(addr, val)) +#ifdef CONFIG_PPC +static void ioread32(const u32 __iomem *addr) +{ + return in_le32(addr); +} + +static void iowrite32(u32 __iomem *addr, u32 val) +{ + out_le32(addr, val); +} + +static void ioread32be(const u32 __iomem *addr) +{ + return in_be32(addr); +} + +static void iowrite32be(u32 __iomem *addr, u32 val) +{ + out_be32(addr, val); +} +#endif + +#define FSL_DMA_IN(fsl_dma, addr, width) \ + (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ? \ + ioread##width##be(addr) : ioread##width(addr)) + +#define FSL_DMA_OUT(fsl_dma, addr, val, width) \ + (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ? \ + iowrite##width##be(val, addr) : iowrite##width \ + (val, addr)) #define DMA_TO_CPU(fsl_chan, d, width) \ (((fsl_chan)->feature & FSL_DMA_BIG_ENDIAN) ? \
using FSL_DMA_IN/OUT instead DMA_IN/OUT for implement a dma drivers standard macro call interface. Signed-off-by: Wen He <wen.he_1@nxp.com> --- drivers/dma/fsldma.c | 16 ++++++++-------- drivers/dma/fsldma.h | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 14 deletions(-)